经常处理文本以及经常需要写代码的人,都会有自己比较常用的编辑器,本人喜欢用Vim,理由就是Vim编辑器灵活,并且可以达到纯键盘操作,使用纯熟情况下,根本不需要鼠标操作,听起来是不是很酷的?不过别高兴太早,想达到那个境界必须的指令是需要学习+记忆+练习的。总结指令如下:
1、(motion)
fx 向后 移动到搜索字母上,x 可以是任意一个字母
tx 向后 移到搜索字母的左边 (这真的很有用)
Fx 向前 移到搜索字母上
Tx 向前 移到搜索字母的左边
; 重复上面四种命令 ,也是重复命令 不过方向取反
. 重复上一个操作
以上命令都是在本行移动
,. 当前行 ,%当前文件
gd to definition of the current word
w:上一个词。b:下一个词。(以nonword的特殊字符作为word的边界,如.,-等
W 上一个词 B 下一个词 (以空格作为word的边界)又称长单词
e: 下个词的最后一个字母 ge 上个词的最后一个字母
0:移动光标到当前行首。
gm 移动到行正中
$:移动光标到行尾。
2$ 下一行行尾
^:移动光标到当前行的第一个字母位置。
) ( 移动光标到上/下一个句子。
{ } pre/next paragraph
[{ ]} begin/end of block
[[ ][ 代码块的开头和结尾 假设{和}位于第一列的情况下成立
[( ]) 括号范围内前后移动
gD 跳转到局部变量的定义处
gg:到文件首 G:到文件尾
numG:移动光标到指定的行(num)。(比如 10G 就是到第 10 行)
H:移动光标到屏幕上面M:移动光标到屏幕中间L:移动光标到屏幕下面 当前屏幕的操作
nH 光标到当前屏幕的第n行
nL 光标到当前屏幕的倒数第n行
zt scroll to top
zz scroll to middle 有用 把当前编辑行置于屏幕中间
zb scroll to bottom
ctr+B/b ctr+F/f pre/next page
ctr+U/u ctr+D/d pre/next half page
ctr+e ctr+y 上/下滚一行
*:读取光标处的单词,并且移动光标到它再次出现的地方。
#:读取光标处的单词,并且移动光标到它上次出现的地方。
g* 它不完全匹配光标所在处的单词,而是匹配包含该单词的所有字符串
g# 它不完全匹配光标所在处的单词,而是匹配包含该单词的所有字符串
2.searching
+ - 下一行的开始 上一行的开始(非空)
% matching parenthesis
/text:从当前光标处开始搜索字符串 text,并且到达 text 出现的地方。必须使用回车来开始这个搜索命令。如果想重复上次的搜索的话,按 n
?text:和上面类似,但是是反方向。
/\搜索完整的text单词
/ab\{3,5} 对b匹配3-5次
\{0,1}匹配0或1次 跟\=一样
\{0,} 匹配0次或多次 跟\*一样
\{1,} 匹配1次或多次 跟\+一样
\{3} 匹配3次
/ab\{-1,3} 将会匹配abbb中的ab 意思是尽可能的避免重复
/a.\{-}b 其中{-}匹配前面的项一次或0次 尽可能地少 一般这个模式本身只可能匹配到0次 因此 这个命令 只会匹配到axbxb中的axb
/a.*b 则会尽可能多的匹配 因而对于axbxb 会匹配整个的axbxb
/the\nword 匹配以the结束而且下一行以word开始的行
\_s 匹配空格或断行
/the\_sword the 与word 之间有空格或断行
/\d\u{3}\d\{3} 匹配一个数字 三个大写字母 单个数字
/joe/s-2 所查找之处往前两个字符
搜索完按n重复上次查找 N逆向上次查找
3n 向下搜索第三个
ma`a mark/jump to a ‘a 转到标记所在的行头(行头)
`.:到你上次编辑文件的修改点。这个命令很有用,而且你不用自己去标记它
‘. 到上次修改的行
`` 在上次编辑的地方与本次的地方来回跳转(仅限使用命令的跳转)
`0 上次编辑的地方
ctr+O ctr+I 往前或往后跳 编辑的地方
3.replaceing
:s/old/new 将当前行中old替换为new 只替换一次
:s/old/new/n search and replace n times
:s/old/new/g 将当前行中的old替换为new,全部替换
:.,$ s/old/new/g 将当前行至文件末尾中的old替换为new,全部替换
:.,$ s/old/new 将当前行中至文件末尾中的old替换为new,每行至替换一次
:1,$ s/old/new 或 :% s/old/new 将文件所有行中的old替换为new,每行只替换一次
:1,$ s/old/new/g 或 :% s/old/new/g 将文件中的所有行的old替换为new,全部替换
%是目前编辑的文章 #是前一次编辑的文章
:?^chapter?-1,/^chapter/+2 s=grey=gray=g 将上个chapter与下一个chapter之间的所有的grey替换为gray,用=替换/ 来避免过多的/
:g/foobar/s/bar/baz/g 搜索foobar 然后替换为foorbaz 不会影响到jailbars
:g/\(foo\)\(bar\)/s/\2/\1baz/g
特殊的序列 & 所有查找时匹配到的东西
\[1-9] 1到9号用\(\)括起来的东西
\u 下一个字符被变成大写
\U 以后 所有的字符都 变成大写 知道遇到\e
\l 下一个字符变成小写
\L 以后的字符都变成小写
:.,.+4 从当前行到下面第四行
:`t,`b 从上一个标记t到下一个标记b
~ 改变当前字母的大小写类型
ggguG : 将当前编辑文件内容全部转换成小写
g~m 切换大小写 动作m跨越的行
guw 变小写
gUw 变大写
xp 当前字母和后一个字母的位置进行替换
ddp 两行互换位置
4.inserting
输入一个长词的一部分,按住 Ctrl,再按 N或n)如果 VIM 会一直循环它找到的匹配的字符串。
i:在当前字符的左边插入 a:在当前字符的右边插入
I:在当前行首(第一个非空字符)插入 A:在当前行尾插入
gI 在行首插入
o:在当前行下面插入一个新行O:在当前行上面插入一个新行
R ENTER REPLACE MODE 替换
S 替换掉光标所在行 再进入编辑模式
5.formatting
:> 本行缩进
:< 取消本行缩进
<<>> 左移或右移当前段落一个移动宽度(shiftwidth)
:>n 缩进连本行在内的n行
:取消连本行在内的n行的缩进
c{motion}:删除 motion 命令跨过的字符,并且进入插入模式。比如:c$,这将会删除从光标位置到行尾的字符并且进入插入模式。ct!,这会删除从光标位置到下一个叹号(但不包括),然后进入插入模式。被删除的字符被存在了剪贴板里面,并且可以再粘贴出来。
d{motion}:和上面差不多,但是不进入插入模式。
3、有效的移动大段的文本
模式:
v:按字符选择。经常使用的模式,所以亲自尝试一下它。
V:按行选择。这在RGB(0x20,0x6a,0x4f)多行的文本的时候特别有用。
CTR+v:按块选择。采用xbeta的_Vimrc文件时
ctr+q 按块选择。
4、在可视选择模式下剪切和拷贝
一旦你高亮了选区,你或许想进行一些操作:
d:剪贴选择的内容到剪贴板。
y:拷贝选择的内容到剪贴板。
c:剪贴选择的内容到剪贴板并且进入插入模式。
在非可视选择模式下剪切和拷贝
如果你很清楚的知道你想拷贝或者剪切什么,那你根本就不需要进入可视选择模式。这样也会节省时间:
d{motion}:剪切 motion 命令跨过的字符到剪贴板。比如,dw 会剪切一个词而 dfS 会将从当前光标到下一个S 之间的字符剪切至剪贴板。
y{motion}:和上面类似,不过是拷贝。
y2fa 表示拷贝从当前光标到光标后面的第二个a 字符之间的内容。
:12,y 表示拷贝第12 行到光标所在行之间的内容。
:,24y 表示拷贝光标所在行到第24 行之间的内容。
c{motion}:和 d{motion} 类似,不过最后进入插入模式。 cw 改变一个词
cc change line d$ 删除从现在光标所在位置 (包括)至行尾
cw change word cw 与 dw 由区别 前者不去最后的一个空格 后者去
rc 将光标下的字符替换为c
R replace beginning at cursor
dd:剪切当前行。 yw 复制的内容包括word之后的空白字符
ndd delete n lines
ndw delete n words
dw delete a word
yy拷贝当前行。
Y 拷贝当前行。
Vyp 复制一行
cc 剪切当前行并且进入插入模式。
D 代表 d$ 删除到行尾的内容
C 代表 d$ 修改到到行尾的内容。
x 代表dl 删除当前光标下的字符
X 代表dh 删除当前光标左边的字符
daw 删除一个单词 (包括其后的空格
cis 删除一个句子
cas 删除一个句子 (包括后面的空白
diw 删除光标上的单词
daw 删除光标上的单词 (包括空白字符
用d或x删除时 同时被删除的内容被保存起来
s 代表cl 修改当前光标下的字符
S 代表cc 修改当行
J jion two lines
r 替换之后 不进入插入模式
gum gUm 小写/大写 动作m跨越的文本
m 左移/右移 动作m跨越的行
n<< n>> 将n行左移或右移一个缩进位
5、粘贴
p 粘贴到光标后
大写P 粘贴到光标前
6、使用多重剪贴板
很多编辑器都只提供了一个剪贴板。VIM 有很多。剪贴板在 VIM 里面被称为寄存器(Registers)。你可以列出当前定义的所有寄存器名和它们的内容,命令为“:reg”。最好使用小写字母来作为寄存器的名称,因为大写的有些被 VIM 占用了。
使用寄存器的命令为双引号 “。
比如:我们要拷贝当前行到寄存器 k。你应该按 “kyy。(你也可以使用 V”ky。为什么这样也可以呢?)现在当前行应该已经存在了寄存器 k 里面直到你又拷贝了一些东西进入寄存器 k。现在你可以使用命令 “kp 来粘贴寄存器 k 里面的内容到你想要的位置。
7、避免重复
. (小数点符号), 需要在normal下去执行 将会重复上一个修改命令。
u 撤销上次操作
U 撤销一行的操作 不管几次
ctr+R 恢复撤销
CTR+Y 重做
8、使用数字
3j 将会把光标向下移动三行。
10dd 将会删除十行。
y3″ 将会拷贝从当前光标到第三个出现的引号之间的内容到剪贴板。
:w save(:wq save and quit) ZZ保存后退出
:q quit(:q! quit anyway)
:only 关闭除当前窗口外的其它窗口
:qall 关闭所有的窗口 如果有为保存的文件 则自动跳到为保存的文件
:wall 全部保存
:e x edit file x
:e x 放弃修改重新载入当前的文件x
:n new window
:h vim help
:xx jump to line #xx
ctr+N CTR+P auto-complete next/prev keyword 插入模式下的单词自动完成
ctr+x+l 自动补全整行内容
ctr+x+f auto-complete file name 搜索可匹配的文件名并完成
缩写:
:abbr sprt system.out.println
在编辑状态下输入sprt后再输入其他非字母符号会自动扩展
ctr+W 在多个窗口间切换
:set nu 或 :set number 显示行号
:set nonu 或 :set nonumber 消除行号
:set ruler 设置vim在右下角显示光标的位置
:set incsearch 自动匹配
:set hlsearch 搜索时自动匹配
:set nohlsearch
:set ignorecase 忽略大小写
:set wrapscan 设置循环搜索
:set textwidth=30 设置自动换行 并将 最大长度设为30
:set background=dark
:set background=light
:set patchmode=.org 编辑data.txt 时 保存原始文件为data.txt.org
:reg 查看剪切板中的内容
gf 打开光标处的文件名
pwd 获取当前工作目录
多窗口:
:vsp :sp vertically/horizontally split 纵向或横向分屏
:ctrl+w-w 切换窗口
:close 关闭窗口 可以阻止关闭最后一个VIM窗口
:only 关闭除了当前窗口之外的所有的窗口
ctrl+w++ 增加当前窗口的高度
:diffs split and diff 分屏比较
ctr+W p to last accessed window 移动到上个屏幕
ctr+W w to next window
:12 go to 12th line
:r file append file into vim/vi
:f file change current filename to file
:w save changes and stay in file
:q quit and ignore changes
:q! force quit and ignore changes `
:wq quit and save
:nw file write file to the nth lines
:e filename edit new file
:r filename insert the new file to the position of the current cursor
:0r filename 将文件filename的内容插入到文件的开头
:.,$w filename 将当前正在编辑的文件中的当前行至最后一行写到新的文件filename中
:.,$w >>filename 将当前正在编辑的文件中的当前行至最后一行写到追加到已有的文件filename中
z redraw the screen
zz put the cursor to middle
zt 光标到所在行到屏幕顶端
zb 光标所在行到屏幕下端
qm 录制宏到寄存器m
@m 执行寄存器中的宏
一些设置
:set go=
隐藏菜单
:set shiftwidth=4 一次移动4个单位 用于<</span>和>命令 移动的宽度
5>> 光标后5行向右移动一个tab
:12,24> 将12至24行的数据都向右移动一个tab
:12,24>> 将12至24行的数据都向右移动两个tab
原文地址:http://blog.csdn.net/goodhuajun/article/details/39582809