Vim实践Tips(四)

Tip 13 在插入模式下做修改

如果我们在插入模式下输入错误,没有必要先切换模式然后做修改.除了退格键,我们还有一些插入模式下的命令可以用.

凭借触感打字不仅仅是不看键盘.而是凭借感觉输入.当输入错误的时候,甚至他们不用看到屏幕上的错误就知道自己输入错误了.因为他们指头已经知道自己刚刚按错地方了.

当输入的错误在单词结尾的时候,退格键是有效的纠正方式,但是当错误出现在单词开头的时候呢?

出色的打字员推荐这样一个方式: 当出现错误的时候,删除整个单词,然后重新输入.如果你一分钟能输入60个单词,那么重新输入总会比你单个删除字符更快.当然,如果你打字慢,就可以当成一个练习打字速度的练习.多输入正确的单词,有利于你养成输入的感觉.

当然,你也可以切换到命令模式.把光标跳转到单词开头,修改错误,然后A跳转到句子结尾.这个行为肯定是呀看大于1秒了.重要的是,这个不会提高你对输入的感觉

在插入模式下,就像你预料到的,它删除光标前的字符.下面的快捷键也是挺好的:

  • <C-h> 删除前面的一个字符,等于退格键
  • <C-w> 删除前面的一个单词
  • <C-u> 删除到本行开始

上面的命令不是插入模式特有,甚至不是Vim特有的,你也可以在Bash Shell中使用它们.

Tip14 回到命令模式

插入模式是特定用于文本输入的模式.命令模式才是才是我们花费时间最多的模式,它的名字是normal mode,这个名字说明了一切.所以,会在这两者之前切换就很重要了.

经典的返回命令模式的方式是按<Esc>键,但是对于大多数键盘,这个键有点远.所以,作为备选方案,你可以按Ctrl+[,这个组合件和<Esc>等价.

  • <Esc> 切换到命令模式
  • <C-[> 切换到命令模
  • <C-o> 在插入和命令模式下切换

遇见插入命令模式

插入命令模式是命令模式的一个特别版本.我们可以出发一个单独命令,之后我们就会进入插入模式.在插入模式中,我们可以通过<C-o>切换到命令模式.

我们会通过zz命令将当前行滚动到屏幕中间.而我经常做的是在插入模式下<C-o>zz,这样会把当前行滚动到屏幕中间,并且可以继续输入.

Tip 15 在不离开插入模式下前提下,从寄存器粘贴

Vim的复制粘贴命令多数情况下是在命令模式下执行的.但是,有时候我们想在插入模式进行.

映射CapsLock键.

对于Vim的使用者来说,CapsLock键简直就是个威胁.例如本来j是移动.可是当CapsLock之后,它成为了J是联合两行.很多Vimer都把CapsLock映射成了其他键位.例如<Esc>或者Ctrl.我推荐你对它进行映射.

下面一段文字

1
2
Practical Vim, by Drew Neil
Read Drew Neil's

我们想通过插入本书书名的方式完成第二行.本书的名字已经在第一行了.

1
2
Practical Vim, by Drew Neil  " yt,
Read Drew Neil's Practical Vim "按键顺序jA <C-r>0.<ESc>

yt,复制,之前的单词到寄存器中
<C-r>0 粘贴寄存器中的内容到当前光标我再的位置.

通用的格式是<C-r>{register}这个register是我们想要插入的寄存器.

<C-r>{register} 这个命令对于少数的字符来说,是比较好的.但是如果粘贴大量的文本,你就会感觉到了延迟.因为这个命令从寄存器中粘贴,相当于一个一个的字符进行输入.如果textwidth或者autoindent选项开启了.那么你可能会得到一些不想要的断行或者额外的缩进.

<C-r><C-p>{register}命令更智能一些.它真实的插入文字,并且能够修正缩进问题.所以,如果要从寄存器中粘贴多行文本.我推荐你使用这个命令.

Tip16 在输入处进行计算

表达式寄存器允许我们执行计算并插入到我们的文档中.

多数Vim的寄存器既可以包含字符组成的字符串,也可以包含一整行文字.我们通过删除或者复制命令设置寄存器的内容.

表达式寄存器有所不同.它可以评估一段Vim脚本代码,然后返回结果.所以,我们可以把它当做一个计算器.它的结果可以和其它的文本寄存器一样使用.

在插入模式下输入<C-r>=,这样,在底行下会有提示.然后就能直接输入计算表达式了.当计算完成.<CR>一下,表达式结果就能直接插入到文档中了.

假设有下面的文本

1
6 chairs, each costing $35, totals $

使用寄存器:

1
6 chairs, each costing $35, totals $210   "A<C-r>6*35<CR>

Tip17 通过字符编码插入字符

Vim可以通过字符编码插入任意字符,通过这个特性,我们可以输入键盘上找不到的字符

在插入模式下,输入<C-v>{code}即可,code是字符的编码.Vim要求code是三位数.所以,如果我们要输入A这个字符,它的字符编码是65,那么我们需要输入<C-v>065.

但是如果我们想要插入大于三位的字符编码怎么办呢?我们可以告诉Vim,要使用十六进制输入<C-v>u{1234}.例如,我们要插入一个倒着的问号.(字符码是00bf) 那么我们输入<C-v>u00bf

使用ga命令可以查看文档中字符的编码.命令模式下将光标停留在想要查看的字符上,然后ga,文档的底部将会显示它的信息,包括字符编码,十六进制和十进制表示.

另外一种场景,如果<C-v命令后面跟了非数字键,那么它插入那个键的文字表示,例如我按下<C-v>退格键,那么输入的将是<BS>

Tip18 通过连字插入字符.

通过字符编码插入字符虽好,但是字符编码难记.通过连字插入会简单一些

在插入模式下,输入<C-k>{char1}{char2}即可

连字通常是有一定的意义的.例如常见的1/2,1/3,我们可以输入<C-k>12,<C-k>13得到.倒置的问号可以通过<C-k>?I得到.

更多的连字可以通过:digraphs查看.

使用替换模式覆盖文字

有下面一段文字

1
2
Typing in Insert mode extends the line. But in Replace mode
the line length doesn't change.

我们想把两句话合并成一句话.意味着:

  1. .换成,
  2. B改成b
    1
    2
    Typing in Insert mode extends the line, but in Replace mode
    the line length doesn't change.

我们使用f.定位光标到.的位置.然后R进入替换模式.然后输入, b替换原来的字符.完成替换之后,我们可以按<Esc>返回命令模式.

使用可视化替换模式

一些字符会给替换模式带来麻烦,例如<Tab>产生的缩进.如果要替换,需要输入很多字符(根据你对tab的设置),这时候,使用gR命令是更好的选择.