《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,这个单词我们可以用,dbxbdwdaw

加减操作

<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”。


《Vim使用技巧》读书笔记
https://www.zhaojun.inkhttps://www.zhaojun.ink/archives/vim-read-note
作者
卑微幻想家
发布于
2022-12-03
许可协议