VIM 编辑器的使用_2

使用 VIM 做小的修改

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

d 命令(类似的还有 c、y 等命令)
d 命令是一个特殊的命令,后面需要接上动作(motion),使用实例:

  1. dw
       
       
    1. I am a boy.

    光标位于 b 上时,输入 dw 将删除 boy 这个词。如果需要删除多个词,例如,删除 4 个词,可以使用 d4w。
    这里的 w 或者 4w 就是动作(motion)

  2. d$ 和 d0
    $ 的含义是移动到句尾,那么 d$ 的含义就是删除从光标处到句尾的所有字符。
    0 的含义是移动到句首,那么 d0 的含义就是删除从光标处到行首的所有字符(不包括光标下的字符)。
  3. dnh、dnj、dnk、dnl(这里 n 为计数)
    d4h 表示向左删除 4 个字符
    d4j 表示向下删除 4 个字符
    d4k 表示向上删除 4 个字符
    d4l 表示向右删除 4 个字符
  4. dG 和 dgg
    我们用 dG 来删除从此行到文件尾的所有字符。
    我们用 dgg 来删除从此行到文件头的所有字符。
  5. dfx(这里 x 为一个字符)
    我们知道 fx(x 为一个字符)用于找到 x 字符,那么 dfx 表示删除从此处到 x 字符处的所有字符(包括 x 字符)

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

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

 
 
  1. 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 命令可以有计数前缀,例如:

 
 
  1. hello

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

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

使用可视模式

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

 
 
  1. hello boy.

假定光标在 h 上,我们在普通模式下敲入 vlllllld,那么 hello 和后面的空格将被删除掉。
如果使用 V 命令也可以进入可视模式,这个时候整行都被选中了,这个时候,只能进行上下移动,左右移动将无效,每次上移或者下移都会选中一行。例如 Vjj 那么你会选择 3 行。
可视模式下,使用 0 命令可以移动光标到被选择的文字的另一端。

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

 
 
  1. aaa 1
  2. aaa 2
  3. aaa 3

现在想修改为

 
 
  1. bbb 1
  2. bbb 2
  3. bbb 3

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

关于粘贴的更多内容

命令 P 和命令 p 一样用于粘贴,只是命令 P 会把粘贴的内容粘贴在光标前。
删除字符后,能够使用 p 来粘贴被删除的字符,例如:

 
 
  1. hello.

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

 
 
  1. hlelo.

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

使用剪贴板

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

用宏来消除重复的动作

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

命令行相关操作

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

  1. Ctrl+r Ctrl+w
    把处于光标下的 word 放入命令行中
  2. Ctrl+r Ctrl+a
    把处于光标下的 word 放入命令行中,word 中可以包含标点符号
  3. Ctrl+r Reg
    把寄存器 Reg 中的内容放入命令行中,例如:Ctrl+R+”
    我们使用 y 命令复制的内容被存放于寄存器 0 中
在多个文件中查找

我们之前谈过了在某个文件进行查找的方法,如果希望在多个文件中进行查找,那么可以使用 vimgrep(vim)命令。其用法如下:

 
 
  1. vim[grep][!] /{pattern}/[g][j] {file} ...

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

 
 
  1. :vimgrep /an error/ *.c
  2. :vimgrep /\<FileName\>/ *.h include/*
  3. :vimgrep /myfunc/ **/*.c

这里 ** 表示递归查找。

使用跳转列表(Jump list)
  1. 使用 Ctrl-o 用于跳转到前一个位置
  2. 使用 Ctrl-i 用于跳转到下一个位置
Insert mode completion(插入模式补全)

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

  • CTRL-X CTRL-N
    使用当前文件中的关键词来进行补全
  • CTRL-X CTRL-I
    使用当前文件中的或者包含文件(include files)中的关键词来进行补全。例如:
    现在存在一个 C 头文件 test.h,其中包含字符串 hello,而源文件 test.c 内容如下:

       
       
    1. #include <test.h>

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

  • CTRL-X CTRL-D
    使用当前文件中的或者包含文件中的定义(或者宏)的名字进行补全
  • CTRL-N 或者 CTRL-P(N 的含义为搜索下一个,P 的含义为搜索前一个)
    关键词补全,在何处查找关键词,取决于 complete 选项的设置。complete 的值可以为(这里未全部列举):

    1. . 表示搜索当前的 buffer
    2. w 表示搜索其他窗口的 buffer
    3. b 表示搜索其他的被载入的 buffers(在 buffer list 中)
    4. u 表示搜索未被载入的 buffers(在 buffer list 中)
    5. U 表示搜索 buffers(不在 buffer list 中)
    6. k 表示搜索由 dictionary 选项指定的文件
    7. k{dict} 表示搜索文件 {dict},例如:set cpt=k/usr/dict/*
    8. s 表示搜索由 thesaurus 选择指定的文件
    9. s{tsr} 表示搜索文件 {tsr}
    10. i 表示搜索当前和包含的文件
    11. d 表示搜索当前和包含的文件中的定义(或者宏)的名字
    12. ] 或者 t 表示 tag 补全

    我们使用 “,” 来分隔各个值,默认的情况下,complete 的值为:
    “.,w,b,u,t,i”

这里并没有完全列举所有的补全方式,详细请参考 Vim 帮助文档:

 
 
  1. :help ins-completion
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值