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
相关文章推荐
- MySQL的多存储引擎架构
- Problem A: C语言习题 字符串长度
- JavaScript 与html的元素产生关联
- XenDesktop5.x/XenApp6.x访问数据流
- javascript标准对象
- 二叉树的前序遍历---非递归实现
- 第4章第5节 二叉树高度和宽度统计
- 更好的Java
- java_basic_review(5) java继承
- VIM 编辑器的使用_1
- Swift 3.0(一)
- leetcode 90 Subsets II
- GSM/GPRS模块无法直接获取UTC时间情况下的另一种获取时间方法,并时间存于模块RTC中。
- C++设计模式浅识抽象工厂模式
- matlab 2014b提示 low-level graphics 时的两步走解决方案
- 华为机试---字符串替换
- SQL基础知识--多行查询结果拼接
- leetcode #139 in cpp
- MySQL安装(以程序的方式启动)zip版
- [原]linux下将网卡设置为混杂模式