vim 使用技巧小结

 

文章出处:http://blog.csdn.net/shift_wwx

 

一、当前行移动光标

fx:移动光标到当前行的下一个 x 处。很明显,x 可以是任意一个字母,而且你可以使用来重复你的上一个 f 命令。
tx:和上面的命令类似,但是是移动到 x 的左边一个位置。
Fx:和 fx 类似,不过是往回找。
w:光标往后移动一个词。

W:光标向后移动一个词,忽略标点

b:光标往前移动一个词。

B:光标往前移动一个词,忽略标点

0:移动光标到当前行首。
^:移动光标到当前行的第一个字母位置。
$:移动光标到行尾。
):移动光标到下一个完整句子。
(:移动光标到上一个完整句子。

{:移动光标到上一个完整段落

}:移动光标到下一个完整段落

 

二、文件内移动光标

:向下移动一屏。
:向上移动一屏。

:向上移动半屏

:向下移动半屏

G:到文件尾

numG:移动光标到指定的行(num)。(比如 10G 就是到第 10 行)
gg:到文件首
H:移动光标到屏幕上面
M:移动光标到屏幕中间
L:移动光标到屏幕下面
*:读取光标处的字符串,并且移动光标到它再次出现的地方。
#:和上面的类似,但是是往反方向寻找。
/text:从当前光标处开始搜索字符串 text,并且到达 text 出现的地方。必须使用回车来开始这个搜索命令。如果想重复上次的搜索的话,按 n。
?text:和上面类似,但是是反方向。
ma:在当前光标的位置标记一个书签,名字为 a。书签名只能是小写字母。你看不见书签的存在,但它确实已经在那里了。
`a:到书签 a 处。注意这个不是单引号,它一般位于大部分键盘的 1 的左边。
`.:到你上次编辑文件的地方。这个命令很有用,而且你不用自己去标记它。

 

三、高效输入

VIM 有一个非常漂亮的关键词自动完成系统,只要输入关键词的前几个字符,就可以自动补齐。
列出一个跟输入字符相符合的字串,连续按可以在list中选择。
跟上面一样,只不过上面是向下选择字串,它是向上选择。
 

四、插入模式

i:在当前字符的左边插入
I:在当前行首插入
a:在当前字符的右边插入
A:在当前行尾插入
o:在当前行下面插入一个新行
O:在当前行上面插入一个新行
c{motion}:删除 motion 命令跨过的字符,并且进入插入模式
比如:c$,这将会删除从光标位置到行尾的字符并且进入插入模式
ct!,这会删除从光标位置到下一个叹号(但不包括),然后进入插入模式。被删除的字符被存在了剪贴板里面,并且可以再粘贴出来。
d{motion}:和上面差不多,但是不进入插入模式。

 

五、编辑命令

d{motion}:剪切 motion 命令跨过的字符到剪贴板。比如,dw 会剪切一个词而 dfS 会将从当前光标到下一个 S 之间的字符剪切至剪贴板。
y{motion}:和上面类似,不过是拷贝。
c{motion}:和 d{motion} 类似,不过最后进入插入模式。
dd:剪切当前行。
yy:拷贝当前行。
cc:剪切当前行并且进入插入模式。
D:剪切从光标位置到行尾到剪贴板。
Y:拷贝当前行。
C:和 D 类似,最后进入插入模式。
x:剪切当前字符到剪贴板。
s:和x类似,不过最后进入插入模式。
这些很好记忆,d、c都是剪切,y是复制,c是可以进入插入模式。x、s应该用的比较少。
p:粘贴

u:撤销之前的修改

:还原之前撤销的修改,u撤销后,可以用此还原

 

六、选择

还有跟剪切、复制配合使用的一个特别好用的技巧,那就是选择,不再需要鼠标去选中了。
v{motion}:按字符选择,例如,vl,就是向右选择字符;vj就是向下选择;vww,就是选择两个字符串
V{motion}:按行选择,一般配合上下,例如Vj 、Vk
:按块选择
选择好了之后,剪切就按d,复制就按y,如果想进入插入模式就按c

 

七、神奇的 . 命令

重复上一次编辑命令。

如果删除一个符号,例如dl,再想继续删除的话,是继续dl吗?有个神奇的符号 . (小数点),可以代替做重复的命令。

 

八、数字使用

数字配合命令的使用,会经常用到,而且很快捷。
例如:
4w:移动到第4个词
4l:移动到第4个字符
4G:移动到第4行
4dd:剪切4行
4yy:复制4行

4x:剪切4个字符

4s:剪切4个字符,并插入

命令掌握ok了,加上数字会很快捷。

 

九、查看

/xxx:表示在整篇文档中搜索匹配xxx的字符串, / 表示向下查找。其中xxx可以是正规表达式,关于正规式就不多说了。一般来说是区分大小写的,要想不区分大小写, 那得先输入:set ignorecase。

?xxx:向上查找

n:搜索后查找下一个匹配的字符串

N:向上搜索匹配的字符串

*:搜索下一个跟光标处匹配的单词,以后通过n、N来继续找

#:跟 * 相反

g*:跟 * 差不多,只不过是搜索的是包含光标处单词

g#:同上

gd:同上,只不过光标会到第一个匹配的单词

%:匹配括号

 

十、替换

格式:

:[g]/search_string/s//replace_string/[g][c]

第一个g是全文搜索,第二个g是匹配行中所有匹配点,没有这个g就指第一次匹配点,c表示在替换之前需要用户确认

:s/aa/bb/g       将光标所在行出现的所有包含 aa 的字符串中的 aa 替换为 bb

:s/aa/bb/         将光标所在行第一次出现aa的字符串中的aa替换为bb

:n,$s/aa/bb/g 将从n行到最后一行的包含aa的字符串中aa替换为bb

:%s/aa/bb/g   将全文中所有行出现包含aa的字符串中aa替换为bb

:%s/aa/bb/     将全文中所有行第一次出现包含aa的字符串中aa替换为bb

:n1,n2s/aa/bb/g     将从n1到n2行出现的所有aa替换成bb

:n1,n2s/^/#/      将从n1行到n2行,所有行的开头加上 # 号

还有个特殊字符:^M

由于windows和linux系统使用的行终止符号不同,对于linux系统而言,取自Dos或windows系统文本文件会包含多余的回车字符,需要去掉,用命令:

:1,$s/^M//

注意在linux下^M不是简单的^和M,而是要ctrl+v 和 ctrl+M才能组成的特殊字符

 

其他的替换可以参考一下http://blog.163.com/ccbobo_cat/blog/static/3209946220090851034518/

 

十一、多文件编辑

在一个 vim 程序中打开很多文件进行编辑是挺方便的.
   :sp(:vsp) 文件名     vim 将分割出一个横(纵)向窗口, 并在该窗口中打开新文件.
                                    从 vim6.0 开始, 文件名可以是一个目录的名称, 这样, vim 会
                                    把该目录打开并显示文件列表, 在文件名上按回车则在本窗口打
                                    开该文件, 若输入 O 则在新窗口中打开该文件, 输入 ? 可以看到帮助信息.

   :e 文件名            vim 将在原窗口中打开新的文件, 若旧文件编辑过, 会要求保存。

   ctrl-w-w               vim 分割了好几个窗口怎么办? 输入此命令可以将光标循环定位到各个窗口之中。

                                或者ctrl+w+h:切左边窗口

                                        ctrl+w+l:切右边窗口

                                        ctrl+w+上方向键:切上边窗口

                                        ctrl+w+下方向键:切下边窗口

   :ls                  此命令查看本 vim 程序已经打开了多少个文件, 在屏幕的最下方
                       会显示出如下数据:
                       1    %a       "usevim.html"          行 162
                       2    #        "xxxxxx.html"          行 0
                       其中:
                       1                表示打开的文件序号, 这个序号很有用处.
                       %a               表示文件代号, % 表示当前编辑的文件,
                                       # 表示上次编辑的文件
                       "usevim.html"    表示文件名.
                       行 162           表示光标位置.
  

   :b 序号(代号)        此命令将指定序号(代号)的文件在本窗口打开, 其中的序号(代号)

                                  就是用 :ls 命令看到的.

   :set diff            此命令用于比较两个文件, 可以用

                           :vsp filename命令打开另一个文件, 然后在每个文件窗口中输入此命令,就能看到效果了。

 

十二、设置环境变量

将下面的环境直接copy到/etc/vimrc.local 里面

" 设定默认解码 
set fenc=utf-8 
set fencs=utf-8,usc-bom,euc-jp,gb18030,gbk,gb2312,cp936 


" 不要使用vi的键盘模式,而是vim自己的 
set nocompatible 


" history文件中需要记录的行数 
set history=100 


" 在处理未保存或只读文件的时候,弹出确认 
set confirm 


" 与windows共享剪贴板 
set clipboard+=unnamed 


" 侦测文件类型 
filetype on 


" 载入文件类型插件 
filetype plugin on 


" 为特定文件类型载入相关缩进文件 
filetype indent on 


" 保存全局变量 
set viminfo+=! 


" 带有如下符号的单词不要被换行分割 
set iskeyword+=_,$,@,%,#,- 


" 语法高亮 
syntax on 


" 高亮字符,让其不受100列限制 
":highlight OverLength ctermbg=red ctermfg=white guibg=red guifg=white 
":match OverLength '\%101v.*' 


" 状态行颜色 
"highlight StatusLine guifg=SlateBlue guibg=Yellow 
"highlight StatusLineNC guifg=Gray guibg=White 


""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" 文件设置 
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" 不要备份文件(根据自己需要取舍) 
set nobackup 


" 不要生成swap文件,当buffer被丢弃的时候隐藏它 
setlocal noswapfile 
set bufhidden=hide 


" 字符间插入的像素行数目 
set linespace=0 


" 增强模式中的命令行自动完成操作 
set wildmenu 


" 在状态行上显示光标所在位置的行号和列号 
" set ruler 
" set rulerformat=%20(%2*%<%f%=\ %m%r\ %3l\ %c\ %p%%%) 


" 使回格键(backspace)正常处理indent, eol, start等 
set backspace=2 


" 允许backspace和光标键跨越行边界 
set whichwrap+=<,>,h,l 


" 可以在buffer的任何地方使用鼠标(类似office中在工作区双击鼠标定位) 
"set mouse=a 
"set selection=exclusive 
"set selectmode=mouse,key 


" 启动的时候不显示那个援助索马里儿童的提示 
set shortmess=atI 


" 通过使用: commands命令,告诉我们文件的哪一行被改变过 
set report=0 


" 不让vim发出讨厌的滴滴声 
set noerrorbells 


" 在被分割的窗口间显示空白,便于阅读 
set fillchars=vert:\ ,stl:\ ,stlnc:\ 


""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" 搜索和匹配 
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" 高亮显示匹配的括号 
set showmatch 


" 匹配括号高亮的时间(单位是十分之一秒) 
set matchtime=5 


" 在搜索的时候忽略大小写 
set ignorecase 


" 不要高亮被搜索的句子(phrases) 
set hlsearch 


" 在搜索时,输入的词句的逐字符高亮(类似firefox的搜索) 
set incsearch 


" 禁止在搜索到文件两端重新搜索
set nowrapscan


" 输入:set list命令是应该显示些啥? 
set listchars=tab:\|\ ,trail:.,extends:>,precedes:<,eol:$ 


" 光标移动到buffer的顶部和底部时保持3行距离 
set scrolloff=3 


" 不要闪烁 
set novisualbell 


" 我的状态行显示的内容(包括文件类型和解码) 
set statusline=%F%m%r%h%w\[POS=%l,%v][%p%%]\%{strftime(\"%d/%m/%y\ -\ %H:%M\")} 


" 总是显示状态行 
set laststatus=2 


""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" 文本格式和排版 
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" 自动格式化 
set formatoptions=tcrqn 


" 显示行号
set number


" 突出显示行
set cursorline


" 显示right margin
set colorcolumn=100


" 继承前一行的缩进方式,特别适用于多行注释 
set autoindent 


" 为C程序提供自动缩进 
set smartindent 


" 使用C样式的缩进 
set cindent 


" 制表符为4 
set tabstop=4 


" 统一缩进为4 
set softtabstop=4 
set shiftwidth=4 


" 用空格代替制表符 
set expandtab 


" 不要用空格代替制表符 
" set noexpandtab 


" 不要换行 
"set nowrap 


" 在行和段开始处使用制表符 
set smarttab 


""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" CTags的设定 
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" 按照名称排序 
let Tlist_Sort_Type = "name" 


" 在右侧显示窗口 
let Tlist_Use_Right_Window = 1 


" 压缩方式 
let Tlist_Compart_Format = 1 


" 如果只有一个buffer,kill窗口也kill掉buffer 
let Tlist_Exist_OnlyWindow = 1 


" 不要关闭其他文件的tags 
let Tlist_File_Fold_Auto_Close = 0 


" 不要显示折叠树 
let Tlist_Enable_Fold_Column = 0 


""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" Autocommands 
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" 只在下列文件类型被侦测到的时候显示行号,普通文本文件不显示 




" 能够漂亮地显示.NFO文件 
set encoding=utf-8 
function! SetFileEncodings(encodings) 
let b:myfileencodingsbak=&fileencodings 
let & fileencodings=a:encodings 
endfunction 
function! RestoreFileEncodings() 
let & fileencodings=b:myfileencodingsbak 
unlet b:myfileencodingsbak 
endfunction 


au BufReadPre *.nfo call SetFileEncodings('cp437')|set ambiwidth=single au BufReadPost *.nfo call RestoreFileEncodings() 


" 高亮显示普通txt文件(需要txt.vim脚本) 
au BufRead,BufNewFile * setfiletype txt 

 

 

 

十三、其他命令

u:撤销之前的修改

:还原之前撤销的修改,u撤销后,可以用此还原

:f 或 CTRL+G :查看当前打开文件的详细路径和文件名

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(Main)