Chinaunix首页 | 论坛 | 博客
  • 博客访问: 874786
  • 博文数量: 372
  • 博客积分: 10063
  • 博客等级: 中将
  • 技术积分: 4220
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-24 11:36
文章分类

全部博文(372)

文章存档

2012年(372)

分类: 虚拟化

2012-03-24 19:10:08

VIM常用操作, 插件和vimrc文件

先上图:

1.常用操作
VIM作为文本编辑器,其强大之处,在我看来,首先就是快速的编辑能力,其次才是丰富的扩展插件。
所以掌握vim的快速编辑的方法是非常重要的,这里列举一些必须熟记的跟效率有关的操作.


<基本编辑操作>
上下左右移动:对应为上(K),下(J),左(H), 右(L);这个是基本要求,千万不要用方向键,用方向键的朋友伤不起~。
gg:跳到文档开头
G:跳到文档末尾
w:跳到下一个单词开头; 4w:跳到往后的第四个单词的开头,依次类推.
e:跳到下一个单词结尾
b:跳到上一个单词开头;4b:跳到往前的第四个单词的开头,依次类推.
0:跳到行的开头
^:跳到行的开头的第一个字符处
$:跳到行的末尾


<快速编辑操作>
=:快速调整当前行的缩进 gg=G:全文档快速缩进调整
Ctrl+p(Ctrl+n):快速补全命令,这个在写代码时非常有用,在编辑模式中, 输入几个字符后再输入此命令则 开始向上(下)搜 索开头与其匹配的单词并补齐, 不断输入此命令则循环查找. 此命令 会在所有在这个 vim 程序中打开的文件中进行匹配.
Ctrl+x+l:自动补全一行的内容,只在当前文档查找匹配的行,多个选项时通过快速补全命令选择.
Ctrl+x+f:自动补全目录.如我输入 c:\p,然后按Ctrl+x+f, 则得到 C:\Program Files\
abbr:缩写设置,如:abbr cmain int main(int argc, char** argv),则下次只要输入cmain后再输入其他非字母符号, 它就会自动扩展为int int main(int argc, char** argv)
qa:录制宏, 宏这个不多解释,就是为了重复执行一系列操作准备的,好一点的编辑器都可以录制宏.
q:结束录制
@a: 执行一次宏, 100@a:重复执行100次


<查找相关>
查找默认是区分大小写的,要不区分大小写的话,先:set ignorecase
f:在当前行查找字符,如fx查找x, ';'查找下一个, ','查找上一个.
/xxx: 向下查找xxx,xxx允许正则表达式
?xxx:向上查找xxx,xxx允许正则表达式
n:查找下一个
N查找上一个
*:查找并高亮当前光标下的单词.
g*:查找并高亮包含当前单词的字符串. 如"helloworld world", 光标在空格后的world上按g*, 则"helloworld"也会高亮
%:查找与光标所在处括号相匹配的反括号, 包括 () [] {}


<替换相关>
替换是vim的强项, 因为可以用正规表达式来匹配字符串.
替换表达式的一些字符含义:
%:全文档搜索
g:全部替换
c:替换前确认
以下提供几个例子.
:s/aa/bb/g :将光标所在行出现的所有包含 aa 的字符串中的 aa 替换为 bb, g表示全部匹配点都替换,没有g则只替换第一个匹配的
:s/\/bb/g :将光标aaxy所在行出现的所有 aa 替换为 bb, 仅替换 aa 这个单词,类似于aaxy之类的不会被替换
:%s/aa/bb/g :将文档中出现的所有包含 aa 的字符串中的 aa 替换为 bb
:12,23s/aa/bb/g :将从12行到23行中出现的所有包含 aa 的字符串中的 aa 替换为 bb
:12,23s/^/#/ :将从12行到23行的行首加入 # 字符
:%s= *$== :将所有行尾多余的空格删除
:g/^\s*$/d :将所有不包含字符(空格也不包含)的空行删除.


<复制粘贴>
y 表示拷贝, d 表示删除, p 表示粘贴. 其中拷贝与删除是与光标移动命令
YY:复制整行
dd:删除整行
ddp:交换当前行和下一行
ggyG:表示复制整篇文档
ggdG:表示删除整篇文档
yw:表示拷贝从当前光标到光标所在单词结尾的内容.
dw:表示删除从当前光标到光标所在单词结尾的内容.
y0:表示拷贝从当前光标到光标所在行首的内容.
d0:表示删除从当前光标到光标所在行首的内容.
y$:表示拷贝从当前光标到光标所在行尾的内容.
d$:表示删除从当前光标到光标所在行尾的内容.
yfa:表示拷贝从当前光标到光标后面的第一个a字符之间的内容.
dfa:表示删除从当前光标到光标后面的第一个a字符之间的内容.


2.常用插件

这个其实不算插件,是一个独立的程序,需要安装这个程序放在系统Path所包含的目录中。
安装很简单,直接下载ctags.exe即可(Windows下),最简单就直接将ctags放在system32目录下。
为了操作方便,在vimrc中设置一些快捷键就可以了:
"-------------------------------------------cags------------------------------>>
map :!ctags -R --fields=+lS "生成tag文件,喜欢的时候就按一下F8"
"映射跳转快捷键,跳转到光标下单词的定义处,g]会列出跳转列表,如果需要自动跳转到第一个记录,则用map fj "
map fj g]
"跳回之前的位置"
map ff



这个插件用来查看当前文件定义的变量、函数等信息, 挺有用的,被用得很泛滥.
安装很简单,下载taglist.vim放入vim的plugin目录就可以了
在vimrc中简单设置一些选项:(更多设置自己输入:help taglist.txt查看哦,记得之前要将taglist.txt放入vim的doc目录哦)
"-------------------------------------------taglist-------------------------->>
"快捷键"
noremap :TlistToggle
"以下是一些taglist设置"
"设定windows系统中ctags程序的位置"
if MySys() == "windows"
"指定ctags程序的位置"
let Tlist_Ctags_Cmd = 'ctags'
elseif MySys() == "linux"
let Tlist_Ctags_Cmd = '/usr/bin/ctags'
endif
"不同时显示多个文件的tag,只显示当前文件的"
let Tlist_Show_One_File = 1
"如果taglist窗口是最后一个窗口,则退出vim"
let Tlist_Exit_OnlyWindow = 1
"在右侧窗口中显示taglist窗口"
let Tlist_Use_Right_Window = 1
"设置按照名称排序,这样或许找函数名会容易些"
Tlist_Sort_Type="name"
"vim启动时自动打开taglist窗口"
"Tlist_Auto_Open=1
"打开taglist时焦点自动转到taglist窗口"
"Tlist_GainFocus_On_ToggleOpen=1
"让taglist始终解释文件中的tag,不管taglist窗口有没有打开"
"Tlist_Process_File_Always=1



目录树, 同时还可以对文件进行vim的打开操作等.
安装跟上面的一样,下载NERD_tree.vim放入vim的plugin目录.
在vimrc中设置一下:
"-------------------------------------------NERD_tree.vim--------------------->>
"设置快捷键"
nmap :NERDTreeToggle

"禁用所有与NERD_tree有关的命令"
"let loaded_nerd_tree=1
"不显示指定的类型的文件"
"let NERDTreeIgnore=['/.vim$', '/~$']
"不显示隐藏文件(好像只在linux环境中有效)"
let NERDTreeShowHidden=0
"排序"
let NERDTreeSortOrder=['//$','/.cpp$','/.c$', '/.h$', '/.py$', '/.lua$', '*']
"不分大小写排序"
let NERDTreeCaseSensitiveSort=0
"设置窗口尺寸"
let NERDTreeWinSize=30
"是否显示行号"
"let NERDTreeShowLineNumbers=1
"是否显示书签"
"let NERDTreeShowBookmarks=1
"打开文件后, 关闭NERDTrre窗口"
"let NERDTreeQuitOnOpen=1
"高亮NERDTrre窗口的当前行"
let NERDTreeHighlightCursorline=1



用来切换vim当前打开的文件的.
安装如上,下载bufExplorer.vim放到vim的plugin目录下.
在vimrc中设置一下:
"-----------------------------------------bufExplorer.vim--------->>"
noremap zz :BufExplorer


安装了以上几个插件后,vim已经像模像样了,用起来也很方便了.打开目录浏览, 打开taglist, 生成tag,fj跳转,ff跳转返回 zz打开缓冲文件窗口


vimrc文件
vimrc文件配置得好的话,操作起来更方便快捷, 这个不多说了,附上我的vimrc文件:

-------------------------------------------基本设定------------------------->>
set fileencodings=ucs-bom,utf-8,cp936 "自动识别的文件编码
set nocompatible "不兼容vi
set magic
set ru "标尺信息
set ai "自动缩进
set sw=4 "自动缩进宽度
set ts=4
set dy=lastline "显示最多行,不用@@
set backspace=indent,eol,start
colo evening
sy on
set go= "无菜单、工具栏
set nobackup
set hlsearch
set incsearch
set hls
set showmatch
set autochdir "需要自动改变vim的当前目录为打开的文件所在目录则设置此项
set showcmd
set smartindent
set tags=tags; "设置tag文件的搜索路径
set tags+=/usr/include/tags;
filetype plugin on "支持插件
set cursorline "当前行有下划线
set virtualedit=onemore
"set number "需要显示行号则设置该项
"set path=.,/usr/include,include "vimgrep时额外的搜索路径
"highlight Comment ctermfg=gray "设置注释的颜色
"highlight Macro ctermfg=blue "设置宏定义的颜色
"hi Folded ctermfg=red ctermbg=darkblue
"hi FoldColumn guibg=green guifg=grey20 ctermfg=4 ctermbg=7

"-------------------------------------------快捷键设置----------------------->>
noremap :update
noremap :w :!Python %

" 文件查找
noremap :vimgrep /=expand("")/j *.txt *.cpp *.h *.py *.java *.lua \| :copen
noremap :vimgrep /=expand("")/j **/*.txt **/*.cpp **/*.h **/*.py **/*.java **/*.lua \| :copen
noremap :vimgrep /=expand("+")/j **/*.txt **/*.cpp **/*.h **/*.py **/*.java **/*.lua \| :copen

" tabedit
nmap te :tabedit
nmap tn :tabnew
noremap :tabn


"-------------------------------------------函数定义------------------------->>
fun! ToggleFold()
if foldlevel('.') == 0
normal! l
else
if foldclosed('.') < 0
. foldclose!
else
. foldopen!
endif
endif
" Clear status line
echo
endfun

"空格键折叠/展开折叠
noremap :call ToggleFold()

function FoldBrace()
if getline(v:lnum+1)[0] == '{'
return 1
endif
if getline(v:lnum) =~ '{'
return 1
endif
if getline(v:lnum)[0] =~ '}'
return '<1'
endif
return -1
endfunction
if has("autocmd")
filetype plugin indent on
augroup vimrcEx
au!
autocmd FileType text setlocal textwidth=78
autocmd BufReadPost *
\ if line("'\"") > 0 && line("'\"") <= line("$") |
\ exe "normal g`\"" |
\ endif
au BufReadPost *.h,*.hh,*.c,*.ec,*.cpp,*.hpp,*.ecpp,*.pc set foldexpr=FoldBrace()
au BufReadPost *.h,*.hh,*.c,*.ec,*.cpp,*.hpp,*.ecpp,*.pc set foldmethod=expr
au BufReadPost *.h,*.hh,*.c,*.ec,*.cpp,*.hpp,*.ecpp,*.pc set foldenable
au BufWinLeave *.ztx mkview
au BufWinEnter *.ztx silent loadview
au BufNewFile,BufRead *.txt setf txt
augroup END
endif

""弹出窗口,让用户输入要查询的字串
"在include 和 source目录中查找,你可以根据情况进行修改
function s:Searchwordzx()
let findstring = inputdialog("Search string: ",expand(""))
if findstring != ""
execute "vimgrep " findstring "*"
endif

endfunction

""========================================
""从sdir.txt中读入目录,并在这些目录下查找指定字串,
"”sdir.txt要和源程序放在同一个目录下。
function s:Searchwordglzx()
let searchstring = expand("")

let searchdir = ''
for line in readfile("sdir.txt",'',6)
let searchdir .= fnameescape(line).'*.[csh] '
endfor

if searchstring != ""
execute "vimgrep " searchstring searchdir
endif

endfunction

"=====================================================================插件=============================================================
"-------------------------------------------ctags---------------------------->>
noremap :!ctags -R --fields=+lS
nmap fj g]
nmap ff

"-------------------------------------------taglist.vim---------------------->>
noremap :TlistToggle

let Tlist_Show_One_File = 1
let Tlist_Exit_OnlyWindow = 1
let Tlist_Use_Right_Window = 1

"-------------------------------------------NERD_tree.vim-------------------->>
"设置快捷键"
noremap :NERDTreeToggle

"禁用所有与NERD_tree有关的命令"
"let loaded_nerd_tree=1
"不显示指定的类型的文件"
"let NERDTreeIgnore=['/.vim$', '/~$']
"不显示隐藏文件(好像只在linux环境中有效)"
let NERDTreeShowHidden=0
"排序"
let NERDTreeSortOrder=['//$','/.cpp$','/.c$', '/.h$', '/.py$', '/.lua$', '*']
"不分大小写排序"
let NERDTreeCaseSensitiveSort=0
"设置窗口尺寸"
"let NERDTreeWinSize=30
"是否显示行号"
"let NERDTreeShowLineNumbers=1
"是否显示书签"
"let NERDTreeShowBookmarks=1
"打开文件后, 关闭NERDTrre窗口"
"let NERDTreeQuitOnOpen=1
"高亮NERDTrre窗口的当前行"
let NERDTreeHighlightCursorline=1

"-------------------------------------------BufExplorer.vim------------------>>
noremap zz :BufExplorer

阅读(718) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~