《Vim使用技巧》读书笔记
.命令
.
重复上次的修改
等效长命令
var foo = 1
var bar = 'a'
var foobar = foo + bar
给上面没行代码末尾加;
,可以用$a;
,也可以A;
,利用后面这种方法,更方便利用.
重复
复合命令 | 等效的长命令 |
---|---|
C | c$ |
s | cl |
S | ^c |
I | ^i |
A | $a |
o | A<CR> |
O | ko |
f搜索
f{char}
可以对当前行的字符进行搜索,;
选择下一个,,
选择上一个。
/搜索
/{keywords}
搜索,n
下一个,N
上一个。
删除一个单词
The end is nigh
这时如果光标在最后一个字符h处,要删除nigh,这个单词我们可以用,dbx
,bdw
,daw
加减操作
<C-a> 和 <C-x> 命令分别对数字执行加和减操作。在不带次数执行时,它们会逐个加减,但如果带一个次数前缀,那么就可以用它们加减任意整数。
操作符 + 动作命令 = 操作
Vim的操作符命令
命令 | 用途 |
---|---|
c | 修改 |
d | 删除 |
y | 复制到寄存器 |
g~ | 反转大小写 |
gu | 转换为小写 |
gU | 转换为大写 |
> | 增加缩进 |
< | 减小缩进 |
= | 自动缩进 |
! | 使用外部程序过滤{motion}所跨域的行 |
Vim的语法只有一条额外规则,即当一个操作符命令被连续调用两次时,它会作用于当前行。所以 dd 删除当前行,而 >> 缩进当前行。
gU 命令是一种特殊情况,我们既可以用 gUgU ,也可以用简化版的gUU 来使它作用于当前行。
插入模式的快捷键
按键操作 | 用途 |
---|---|
<C-h> | 删除前一个字符(同退格键) |
<C-w> | 删除前一个单词 |
<C-u> | 删至行首 |
这些命令不是插入模式所独有的,甚至也不是Vim所独有的,在Vim的命令行模式中,以及在 bash shell中,也可以使用它们。
插入模式汇中<C-o>后可以输入一个命令。
不离开插入模式,粘贴寄存器中的文本
\<C-r\>0
表达式寄存器
在插入模式中,输入<C-r>= 就可以访问表达式寄存器,这条命令会在屏幕的下方显示一个提示符,我们可以在其后输入要执行的表达式。输入表达式后敲一下<CR>,Vim就会把执行的结果插入到文档的当前位置了。
用字符编码插入非常用字符
在插入模式中,输入<C-v>,然后输入编码即可输入字符,比如输入A,<C-v>065,Unicode编码,比如¿,它的编码为u00bf,我们只需要输入<C-v>u00bf。
如果你想知道文档中任意字符的编码,只需把光标移到它上面并按 ga 命令,然后屏幕下方就会显示出一条消息,分别以十进制和十六进制的形式显示出其字符编码。
另外,如果 <C-v> 命令后面跟一个非数字键,它会插入这个按键本身所代表的字符。
用替换模式替换已有文本
R:进入替换默认,esc退出。r:只能替换一个字符
可视模式
命令 | 用途 |
---|---|
v | 激活面向字符的可视模式 |
V | 激活面向行的可视模式 |
<C-v> | 激活面向块的可视模式 |
gv | 重选上次高亮选区 |
viw
:选中单词
vaw
:当前单词及单词前面或者后面的空格
vit
:选中标签内部的内容
高亮选区的范围由其两个端点界定。其中一端固定,而另一端可以随光标自由移动,我们可以用 o 键来切换其活动的端点。在定义选区时,如果定义到一半时,才发现选区开始的位置不对,此时用这个键会很方便,我们用不着退出可视模式再从头开始,只需按一下 o,然后重新调整选区的边界即可。
命令行模式快捷键
可以用 <C-w>和 <C-u>分别删除至上个单词的开头及行首,也可以用 <C-v> 或<C-k> 来插入键盘上找不到的字符。还可以用 <C-r>{register} 命令把任意寄存器的内容插入到命令行。
命令行模式定义范围的语法
符号 | 地址 |
---|---|
1 | 文件的第一行 |
$ | 文件的最后一行 |
0 | 虚拟行,位于文件的第一行上方 |
. | 光标所在行 |
'm | 包含位置标记的m行 |
'< | 高亮选区的起始行 |
'> | 高亮选区的结束行 |
% | 整个文件(:1,$的简写形式) |
/<html>/,/<\/html>/p
打印标签范围内的文档,还可以对范围做更正:/<html>/+1,/<\/html>/-1p
:t 命令的一些应用实例
:copy 命令可以简写为两个字母 :co,或者也可以用更加简练的 :t 命令,它是 :copy 命令的同义词。
命令 | 用途 |
---|---|
:6t | 把第6行复制到当前行下方 |
:6t | 把当前行复制到第6行下方 |
:t. | 为当前行创建一个副本(类似于普通模式下的yyp) |
:t$ | 把当前行复制到文本末尾 |
:‘<,’>t0 | 把高亮选中的行复制到文件的开头 |
在指定范围上执行普通模式命令
:'<,'>normal .
命令可以解读为“对高亮选区中的每一行,对其执行普通模式下的 . 命令”。
:%normal A;
告诉 Vim 在文件每行的结尾都添加一个分号。
管理多个文件
-
:ls
会列出所有被载入到内存中的缓冲区的列表% 符号指明哪个缓冲区在当前窗口中可见,而 # 符号则代表轮换文件。按 <C-^>可以在当前文件和轮换文件间快速切换
-
:bnext
可以切换到列表中的下一个缓冲区 -
:buffer N
命令直接凭编号跳转到一个缓冲区
基于单词移动
命令 | 光标动作 |
---|---|
w | 正向移动到下一个单词的开头 |
b | 反向移动到当前单词上/上一单词的开头 |
e | 正向移动到当前单词/下一单词的结尾 |
ge | 反向移动到上一单词的结尾 |
对字符进行查找
命令 | 用途 |
---|---|
f | 正向移动到下一个{char}所在之处 |
F | 反向移动到下一个{char}所在之处 |
t | 正向移动到下一个{char}所在之处的前一个字符上 |
T | 反向移动到下一个{char}所在之处的前一个字符上 |
精确的文本对象进行选择
Vim 的文本对象由两个字符组成,第一个字符永远是 i 或是 a。我们一般说,以 i 开头的文本对象会选择分隔符内部的文本,而以 a 开头的文本对象则会选择包括分隔符在内的整个文本。为了便于记忆,可以把 i 想成“inside”,而把 a 想成“around”或“all”。