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
2Practical Vim, by Drew Neil
Read Drew Neil's
我们想通过插入本书书名的方式完成第二行.本书的名字已经在第一行了.
1 | Practical Vim, by Drew Neil " yt, |
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 | Typing in Insert mode extends the line. But in Replace mode |
我们想把两句话合并成一句话.意味着:
- 将
.
换成,
- 把
B
改成b
1
2Typing in Insert mode extends the line, but in Replace mode
the line length doesn't change.
我们使用f.
定位光标到.
的位置.然后R
进入替换模式.然后输入, b
替换原来的字符.完成替换之后,我们可以按<Esc>
返回命令模式.
使用可视化替换模式
一些字符会给替换模式带来麻烦,例如<Tab>
产生的缩进.如果要替换,需要输入很多字符(根据你对tab的设置),这时候,使用gR
命令是更好的选择.