您的位置:首页 > 其它

VIM 编辑器的使用_2

2016-06-25 11:12 225 查看


使用 VIM 做小的修改

我们通常使用 x 命令来删除一个字符。实际上,我们可以选择更加好用的 d 命令来完成删除操作。

d 命令(类似的还有 c、y 等命令)

d 命令是一个特殊的命令,后面需要接上动作(motion),使用实例:
dw
I am a boy.

光标位于 b 上时,输入 dw 将删除 boy 这个词。如果需要删除多个词,例如,删除 4 个词,可以使用 d4w。

这里的 w 或者 4w 就是动作(motion)

d$ 和 d0

$ 的含义是移动到句尾,那么 d$ 的含义就是删除从光标处到句尾的所有字符。

0 的含义是移动到句首,那么 d0 的含义就是删除从光标处到行首的所有字符(不包括光标下的字符)。
dnh、dnj、dnk、dnl(这里 n 为计数)

d4h 表示向左删除 4 个字符

d4j 表示向下删除 4 个字符

d4k 表示向上删除 4 个字符

d4l 表示向右删除 4 个字符
dG 和 dgg

我们用 dG 来删除从此行到文件尾的所有字符。

我们用 dgg 来删除从此行到文件头的所有字符。
dfx(这里 x 为一个字符)

我们知道 fx(x 为一个字符)用于找到 x 字符,那么 dfx 表示删除从此处到 x 字符处的所有字符(包括 x 字符)

c 命令

c 命令和 d 命令非常相似,也是用来删除字符,只是执行完 c 命令后会进入到插入模式,等同于 d 命令执行完之后输入 a(append)。例如:

cgg 用于删除从此行到文件头的所有字符,删除后进入插入模式。

y 命令

y 命令的含义和 c 命令以及 d 命令相差甚远,但是它们的用法相似,后面都需要加上一个动作,y 命令用于复制字符(p 命令用于粘贴字符)。例如:
I am a boy.

假定光标位于 b 上,输入 yw(或者 yfy)那么单词 boy 将被复制。

yy dd 和 cc

yy 命令用于复制一行(包括行尾的换行)

dd 命令用于删除一行(包括行尾的换行)

cc 命令用于删除一行后进入插入模式(不包括行尾的换行)

快捷键

dl —— x(小写)—— 删除光标下的一个字符

cl —— s(小写)—— 删除光标下的一个字符然后进入插入模式

dh —— X(大写)—— 删除光标左的一个字符

cc —— S(大写)—— 删除一整行并进入插入模式

d$ —— D —— 删除到行尾

c$ —— C —— 删除到行尾(而不是整行)并进入插入模式

yy —— Y —— 复制一整行

替换单个字符

r 命令用于替换单个字符,在你需要替换的字符上,敲击 r 然后输入需要替换的字符。要注意的是,r 命令后面只能接上一个字符。r 命令可以有计数前缀,例如:
hello

假定光标在 h 上,输入 4rx 后,hello 变成了 xxxxo

重复一个修改

. 命令用于重复最后一次的修改操作(仅仅是修改操作)

删除就是一种修改操作,例如,我们现在想删除 <a> 和 </a> 那么我们可以在字符 < 上敲入 df> 删除 <a>,然后把光标移动到 </a> 的 < 字符上,然后敲入 . 命令


使用可视模式

在普通模式下,输入 v 可以进入可视模式。

可视模式可以使得我们方便的复制和删除字符串。首先,我们输入 v 进入可视模式,然后移动光标,那么移过的字符将会高亮显示,这时如果输入 y 那么被选择的高亮字符将被复制,如果输入 d(或者 c)那么被选择的高亮字符将被删除。
hello boy.

假定光标在 h 上,我们在普通模式下敲入 vlllllld,那么 hello 和后面的空格将被删除掉。

如果使用 V 命令也可以进入可视模式,这个时候整行都被选中了,这个时候,只能进行上下移动,左右移动将无效,每次上移或者下移都会选中一行。例如 Vjj 那么你会选择 3 行。

可视模式下,使用 0 命令可以移动光标到被选择的文字的另一端。

使用 Ctrl-v(Windows 下是 Ctrl-q)进入可视模式,这个时候是以列块为单位(非常有用)。例如:
aaa 1
aaa 2
aaa 3

现在想修改为
bbb 1
bbb 2
bbb 3

这时候就可以使用 Ctrl-v 进入可视模式,然后选中三列 aaa,输入 c 命令用于删除 aaa 并插入 bbb。


关于粘贴的更多内容

命令 P 和命令 p 一样用于粘贴,只是命令 P 会把粘贴的内容粘贴在光标前。

删除字符后,能够使用 p 来粘贴被删除的字符,例如:
hello.

我们在 hello 所在行输入 dd,删除这一行,那么这个时候可以使用 p 来粘贴这一行(无需先复制),因此我们在复制的时候需要注意,如果出现了删除操作,那么复制的内容将发生变换。
hlelo.

如果我们输入 hello 成了 hlelo,我们需要修改 l 和 e 的位置,这个时候,我们只需要把光标移动到 l 上,然后敲入 xp。


使用剪贴板

我们使用命令 y 等复制的内容并不会放入剪贴板,如果需要把复制的内容放入剪贴板,那么可以在复制命令前面加上 “*(寄存器 *),对于粘贴也一样,如果需要粘贴来自剪贴板的字符,使用 “*p


用宏来消除重复的动作

通常情况下使用 . 命令就可以解决很多重复的改变,但有些情况比较特殊,例如连结两行时常常使用 Jx(用 x 删除连结之后的空格),这个时候,. 命令不起作用了,因为它会记录上一次的改变,既是 x 造成的删除,这里 Jx 是两个命令而非一个。因此,我们可以使用宏来解决问题。

使用 qa 开始录制宏到寄存器 a,这时候我们输入 Jx,然后输入 q 表示录制完成,之后我们就可以使用 @a 来表示 Jx 了


命令行相关操作

我们敲击 : 后可以在命令行中进行输入。我们敲击:
Ctrl+r Ctrl+w

把处于光标下的 word 放入命令行中
Ctrl+r Ctrl+a

把处于光标下的 word 放入命令行中,word 中可以包含标点符号
Ctrl+r Reg

把寄存器 Reg 中的内容放入命令行中,例如:Ctrl+R+”

我们使用 y 命令复制的内容被存放于寄存器 0 中


在多个文件中查找

我们之前谈过了在某个文件进行查找的方法,如果希望在多个文件中进行查找,那么可以使用 vimgrep(vim)命令。其用法如下:
vim[grep][!] /{pattern}/[g][j] {file} ...

我们在 pattern 后接上 \c 表示查找时忽略大小写,接上 \C 表示不忽略大小写。默认的时候是否匹配大小写受到 ignorecase 控制(而 smartcase 则不被使用)。我们看一些例子:
:vimgrep /an error/ *.c
:vimgrep /\<FileName\>/ *.h include/*
:vimgrep /myfunc/ **/*.c

这里 ** 表示递归查找。


使用跳转列表(Jump list)

使用 Ctrl-o 用于跳转到前一个位置
使用 Ctrl-i 用于跳转到下一个位置


Insert mode completion(插入模式补全)

在插入和替换模式下,有很多的命令用来补全正在输入的一个关键词(keyword)或者一行:
CTRL-X CTRL-N

使用当前文件中的关键词来进行补全
CTRL-X CTRL-I

使用当前文件中的或者包含文件(include files)中的关键词来进行补全。例如:

现在存在一个 C 头文件 test.h,其中包含字符串 hello,而源文件 test.c 内容如下:

#include <test.h>

这时候输入 he CTRL-X CTRL-I 就可以进行补全

CTRL-X CTRL-D

使用当前文件中的或者包含文件中的定义(或者宏)的名字进行补全
CTRL-N 或者 CTRL-P(N 的含义为搜索下一个,P 的含义为搜索前一个)

关键词补全,在何处查找关键词,取决于 complete 选项的设置。complete 的值可以为(这里未全部列举):

. 表示搜索当前的 buffer
w 表示搜索其他窗口的 buffer
b 表示搜索其他的被载入的 buffers(在 buffer list 中)
u 表示搜索未被载入的 buffers(在 buffer list 中)
U 表示搜索 buffers(不在 buffer list 中)
k 表示搜索由 dictionary 选项指定的文件
k{dict} 表示搜索文件 {dict},例如:set cpt=k/usr/dict/*
s 表示搜索由 thesaurus 选择指定的文件
s{tsr} 表示搜索文件 {tsr}
i 表示搜索当前和包含的文件
d 表示搜索当前和包含的文件中的定义(或者宏)的名字
] 或者 t 表示 tag 补全
我们使用 “,” 来分隔各个值,默认的情况下,complete 的值为:

“.,w,b,u,t,i”

这里并没有完全列举所有的补全方式,详细请参考 Vim 帮助文档:
:help ins-completion
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: