??xml version="1.0" encoding="utf-8" standalone="yes"?> [转脓(chung)]最佳vim技?br>文g原网址Q?BBS 水木清华?smth.org # 最佳vim技?br>---------------------------------------- # 译释Q原理:(x)在visual模式下,"zd 把一个选中的区域命名ؓ(f)z 然后删除Q?br># i q入插入模式Q输入,<C-R>z 撤销刚才的删?然后再写入, # 译释Q?z 命o(h)创徏一个选中的区域ؓ(f)registerQƈ把它命名为z # 译释Q更令h开?j)的有?x)在visual模式下选中几行Q然后输?2> , :vmap st "zdi<?= <C-R>z ?><ESC> :在visual模式下选中的文字前后分别加?lt;?= ??> :autocmd BufEnter * lcd %:p:h : 自动更改到当前文件所在的目录 guw : 字大?狭义? 译注Q徏议对比iw vEU : 字大?q义? ggguG : 把整个文章全部小写(ft!bt!Q?br>gf : 取当前光标处的广义字作ؓ(f)文g名,然后试图打开它! ga : 昄光标处字W的ascii,hex,oct,...晕菜的一堆{?br>ggVGg? : 用rot13~码整个文gQ晕Q)(j) <C-A>,<C-X> : 增加,减少 光标处的狭义字所表示的数?br>:Q?仅仅是分割了(jin)q两个命令,不是命o(h)的一部分Q?br>: Win32的用户可能需要重新定义一下Ctrl-AQ呵?br># 译注Qgood guy, 令h不得不想到perl的数字符?/p>
<C-R>=5*5 : 插入25 (q是一个迷你计器Ӟ) # 引用标记的方法:(x)'a Q即Q单引号加标记名 :map <f8> :r /path/file :map , : 列出以逗号开始的键盘映像 # 在键盘映像中常用的表C?br><CR> : 回R yy@" : 用上面所提到的那个匿名register # 使用外部E序sortq行排序(sort是Unix标准命o(h)Qls,date也是) :'a,'b!sort -u : 对mark a 到mark b中间的内容进行排?br>!1} sort -u : 排序当前D落 (只能在normal模式下?!) : 可编辑文件的bufferQ然后提CZ输入buffer的序P :set hidden : 允许不保存buffer而切换buffer (w/o=without) :nmap ,i :update<CR>: !start c:\progra~1\intern~1\iexplore.exe <cWORD><CR> gvim ftp://209.51.134.122/public_html/index.html # 在visual模式下羃q?(无限可重? :vmap <silent> g/ y/<C-R>=escape(@", '\\/.*$^~[]')<CR><CR> : with spec chars # 跨行匚wQ\_ 表示允许匚w换行W,或者说Q允许匹配新?br># 译注Q小?j),和perl不一?br>/<!--\_p\{-}--> : 匚w多行注释 # 查找当前光标位置所在子例程/函数(subroutine/function)的声?br>:nmap gx yiw/^\(sub\<bar>function\)\s\+<C-R>"<CR> # 在多个文档中搜烦(ch) :argdo /searchstr :%s/fred/joe/igc : 一个常见的替换命o(h)Q修饰符igc和perl中一h?br>:%s/\r//g : 删除DOS方式的回车^M # 列复?br># 译注Q@#%&^#*^%#$! # 或?br>:%s/suck\|buck/loopy/gc : 或?或者需要\QftQ,|不是或? # 调用VIM函数 # 处理列,替换所有在W三列中的str1 # 交换W一列和最后一?(?? # filter all form elements into paste register ---------------------------------------- # 全局命o(h) (其它) # incrementing numbers :.,$g/^\d/exe "norm \<c-p>" : Win32下必重定义Ctrl-A # 保存全局命o(h)的结?(注意必须使用d模式) # 复制每一行,然后在复制出来的每一行两侧加上一?print '复制出来的内? # 指出打开之后执行的命?br>gvim.exe -c "/main" joe.c : 打开joe.cQ然后蟩转到'main' # 对一个文件执行多个命?br>vim -c "%s/ABC/DEF/ge | update" file1.c # 对一l文件执行多个命?br>vim -c "argdo %s/ABC/DEF/ge | update" *.c # 自动~辑文g (~辑命o(h)序列Ex commands已经包含在convert.vim中了(jin)) # 不要加蝲.vimrc和Q何plugins (ȀzM个干净的VIM) ---------------------------------------- #从Q意行开始编?需要perlQ嘿? qqmnYP`n^Aq : 记录到q 然后?@q 重复 # 递增已存在数字到文g?br>:.,$g/^\d/exe "normal! \<c-a>" # 高递增Q看Q?br>http://vim.sourceforge.net/tip_view.php?tip_id=150 :X : 然后vim?x)提CZ输入密码 :g/^/ call Del() #使用该函数的一个例?br>----------------------------------------
]]
[]
再加?br>][
一共是 4 个在D落Q对?C 来讲是函数Q间跌{的命令?br>
ȝ是:(x)
1Q相同就跛_函数的开_(d)(x)Q如果都是左括号或者都是右括号Q,不同p到函数的l尾Q?br> { ?} 用来跛_函数的开头?br> [] ?][ 用来跛_函数的结?br>2Q左叛_叻I“?#8221;在前面。前后前后,“?#8221;也在前面。因此左括号打头则表C向前,x(chng)h头则表示向后Q?br> [[ ?[] 用来向前?br> ]] ?][ 用来向后?br>
l合h是Q?br>[[ 用来跛_光标前面的一个函数开始处。如果光标在函数体内的话Q那是所在函数的开始处?br>][ 用来跛_光标后面的一个函数结֤。如果光标在函数体内的话Q那是所在函数的l尾处?br>]] 用来跛_光标后面的一个函数开始处。如果光标在函数体内的话Q那是下一个函数的开始处?br>[] 用来跛_光标前面的一个函数结֤。如果光标在函数体内的话Q那是上一个函数的l尾处?
1Q先x(chng)惛_前蟩Q还是往后蟩Q?br>如果是想往前,摁 [Q如果是惛_后,摁 ]Q然后指头别村ּ?br>2Q再x(chng)惛_开始处Q还是结֤Q?br>如果是开始处Q就再摁一下。如果是l尾处,摁另一个键?
]]>
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 讑֮默认解码
set fenc=utf-8
set fencs=utf-8,usc-bom,euc-jp,gb18030,gbk,gb2312,cp936
" 不要使用vi的键盘模式,而是vim自己?
set nocompatible
" history文g中需要记录的行数
set history=100
" 在处理未保存或只L件的时候,弹出认
set confirm
" 与windows׃n剪脓(chung)?
set clipboard+=unnamed
" 侦测文gcd
filetype on
" 载入文gcd插g
filetype plugin on
" 为特定文件类型蝲入相关羃q文?
filetype indent on
" 保存全局变量
set viminfo+=!
" 带有如下W号的单词不要被换行分割
set iskeyword+=_,$,@,%,#,-
" 语法高(sh)
syntax on
" 高(sh)字符Q让其不?00列限?
: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
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 文g讄
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 不要备䆾文gQ根据自己需要取舍)(j)
set nobackup
" 不要生成swap文gQ当buffer被丢弃的时候隐藏它
setlocal noswapfile
set bufhidden=hide
" 字符间插入的像素行数?
set linespace=0
" 增强模式中的命o(h)行自动完成操?
set wildmenu
" 在状态行上显C光标所在位|的行号和列?
set ruler
set rulerformat=%20(%2*%<%f%=\ %m%r\ %3l\ %c\ %p%%%)
" 命o(h)行(在状态行下)(j)的高度,默认?Q这里是2
set cmdheight=2
" 使回格键QbackspaceQ正常处理indent, eol, start{?
set backspace=2
" 允许backspace和光标键跨越行边?
set whichwrap+=<,>,h,l
" 可以在buffer的Q何地方用鼠标(cMo(j)ffice中在工作区双击鼠标定位)(j)
set mouse=a
set selection=exclusive
set selectmode=mouse,key
" 启动的时候不昄那个援助索马里儿童的提示
set shortmess=atI
" 通过使用: commands命o(h)Q告诉我们文件的哪一行被改变q?
set report=0
" 不让vim发出讨厌的滴滴声
set noerrorbells
" 在被分割的窗口间昄I白Q便于阅?
set fillchars=vert:\ ,stl:\ ,stlnc:\
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 搜烦(ch)和匹?
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 高(sh)昄匚w的括?
set showmatch
" 匚w括号高(sh)的时_(d)单位是十分之一U)(j)
set matchtime=5
" 在搜索的时候忽略大写
set ignorecase
" 不要高(sh)被搜索的句子QphrasesQ?
set nohlsearch
" 在搜索时Q输入的词句的逐字W高?sh)(cMfirefox的搜索)(j)
set incsearch
" 输入:set list命o(h)是应该显CZ啥?
set listchars=tab:\|\ ,trail:.,extends:>,precedes:<,eol:$
" 光标Ud到buffer的顶部和底部时保?行距?
set scrolloff=3
" 不要闪烁
set novisualbell
" 我的状态行昄的内容(包括文gcd和解码)(j)
set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")}
" L昄状态行
set laststatus=2
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 文本格式和排?
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 自动格式?
set formatoptions=tcrqn
" l承前一行的~进方式Q特别适用于多行注?
"set autoindent
" 为CE序提供自动~进
set smartindent
" 使用C样式的羃q?
set cindent
" 制表Wؓ(f)4
set tabstop=4
" l一~进?
set softtabstop=4
set shiftwidth=4
" 不要用空g替制表符
set noexpandtab
" 不要换行
set nowrap
" 在行和段开始处使用制表W?
set smarttab
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" CTags的设?
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 按照名称排序
let Tlist_Sort_Type = "name"
" 在右侧显C窗?
let Tlist_Use_Right_Window = 1
" 压羃方式
let Tlist_Compart_Format = 1
" 如果只有一个bufferQkillH口也kill掉buffer
let Tlist_Exist_OnlyWindow = 1
" 不要关闭其他文g的tags
let Tlist_File_Fold_Auto_Close = 0
" 不要昄折叠?
let Tlist_Enable_Fold_Column = 0
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Autocommands
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 只在下列文gcd被侦到的时候显CP普通文本文件不昄
if has("autocmd")
autocmd FileType xml,html,c,cs,java,perl,shell,bash,cpp,python,vim,php,ruby set number
autocmd FileType xml,html vmap <C-o> <ESC>'<i<!--<ESC>o<ESC>'>o-->
autocmd FileType java,c,cpp,cs vmap <C-o> <ESC>'<o/*<ESC>'>o*/
autocmd FileType html,text,php,vim,c,java,xml,bash,shell,perl,python setlocal textwidth=100
autocmd Filetype html,xml,xsl source $VIMRUNTIME/plugin/closetag.vim
autocmd BufReadPost *
\ if line("'\"") > 0 && line("'\"") <= line("$") |
\ exe "normal g`\"" |
\ endif
endif " has("autocmd")
" F5~译和运行CE序QF6~译和运行C++E序
" h意,下述代码在windows下用会(x)报错
" 需要去?/q两个字W?
" C的编译和q行
map <F5> :call CompileRunGcc()<CR>
func! CompileRunGcc()
exec "w"
exec "!gcc % -o %<"
exec "! ./%<"
endfunc
" C++的编译和q行
map <F6> :call CompileRunGpp()<CR>
func! CompileRunGpp()
exec "w"
exec "!g++ % -o %<"
exec "! ./%<"
endfunc
" 能够漂亮地显C?NFO文g
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()
" 高(sh)昄普通txt文gQ需要txt.vim脚本Q?
au BufRead,BufNewFile * setfiletype txt
" 用空格键来开x(chng)?
set foldenable
set foldmethod=manual
nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR>
" minibufexpl插g的一般设|?
let g:miniBufExplMapWindowNavVim = 1
let g:miniBufExplMapWindowNavArrows = 1
let g:miniBufExplMapCTabSwitchBufs = 1
let g:miniBufExplModSelTarget = 1
]]>
]]>
2003-3-23
--------------------------------------------------------------------------------
原作者:(x)d.j.rayner (zzapper)
译Qhmisty (%20%20
2003-3-23
# 信息来源
----------------------------------------
www.vim.org : 官方站点
comp.editors : 新闻l?br>http://www.newriders.com/books/opl/ebooks/0735710015.html : Vim书籍
http://vimdoc.sourceforge.net/cgi-bin/vim2html2.pl : 关于vim的可查询文档
http://vimdoc.sourceforge.net/vimfaq.html : VIM FAQ
----------------------------------------
# 基础
----------------------------------------
* # g* g# : L光标处的狭义单词(<cword>) (前向/后向)
% : 括号配对L {}[]()
matchit.vim : 使得 % 能够配对标记
<script> <?php {等
<C-N><C-P> : 插入模式下的单词自动完成
<C-X><C-L> : 行自动完?有用)
/<C-R><C-W> : 把狭义单?<cword> 写到 搜烦(ch)命o(h) ?br>/<C-R><C-A> : 把广义单?<cWORD> 写到 搜烦(ch)命o(h) ?br>:set ignorecase : 搜烦(ch)时忽略大写
:syntax on : ?Perl,HTML,PHP {中q行语法着?br>:h regexp<C-D> : 按下 control-D 键即可得到包含有 regexp 的帮助主题的列表
: (使用TAB可以实现帮助的自动补?
----------------------------------------
# 使更?_vimrc 更容?br>:nmap ,s :source $VIM/_vimrc
# 译释Qnmap 是绑定一个在normal模式下的快捷?br>:nmap ,v :e $VIM/_vimrc
# 译释Q在normal模式下,先后按下 ,s 两个键执行_vimrcQ?,v 则是~辑_vimrc
----------------------------------------
# visual 模式 (例子是:(x)Ld其它?HTML Tags)
:vmap sb "zdi<C-R>z<ESC> :在visual模式下选中的文字前后分别加上和
# 译释Qvmap 是绑定一个在visual模式下的快捷?/p>
# 最?lt;ESC>q回normal模式
# 则选中的行?x)全部羃q两个tab
# 555,偶一开始还是用 :xx,xx s/^/\t\t/Q好dQ?/p>
----------------------------------------
# 文g览
:Ex : 开启目录浏览器Q注意首字母E是大写的
:Sex : 在一个分割的H口中开启目录浏览器
:ls : 昄当前buffer的情?br>:cd .. : q入父目?br>:args : 昄目前打开的文?br>:lcd %:p:h : 更改到当前文件所在的目录
# 译释Qlcd是紧紧改变当前窗口的工作路径Q? 是代表当前文件的文g?
# 加上 :p扩展成全名(是带了(jin)路径Q,加上 :h析取?gu)\?/p>
# 译释Qautocmd指定一个自动命令,BufEnter指定一个事Ӟ* 指定事g的对象,
# lcd %:p:h 指定一个动?br># hehe,好象和写记叙文差不多
----------------------------------------
# ~冲?buffer)览?(W三方的一个最行的脚?
# 需要下?bufexplorer.vim Q?a rel=nofollow>http://www.vim.org/script.php?script_id=42 上就?br>\be : 在缓冲区览器中打开~冲区列?br>\bs : 以分割窗口的形式打开~冲区浏览器
----------------------------------------
# 大小写{?br>guu : 行小?br>gUU : 行大?br>g~~ : 行翻转(当然指大写啦)(j)
# 译释Q?g 是大写转换命o(h)(greate)Qu/U/~是三U{换Ş?写/大写/{)Q?br># 最后一个重复则表示该{换是对于一行而言?/p>
gUw : 字小?狭义?
g~w : 字翻?狭义?
# 译释Q最后一个w 表示该{换是对于一个字而言的,׃是在normal模式下,
# 所以这个w 表示一个狭义字<cword>
vE~ : 字翻?q义?
# 译释QvE q个指o(h)l合?x)进入visual模式Q然后选择一个广义字<CWORD>
# 译释Qؓ(f)什么是q义字呢Q因样可以方便的取到路径啊,?var/www/html/index.htm
# 译释Qgg到文仉行首字符QVq入Visual-Line模式QG到文件末行首字符Q?br># q样选中?jin)整文章,然后g?是用rot13~码整个文g?br>#
# 【关于rot13——谁让英文是偶数个字母啊?br># ROT13 是一U简单的~码Q它把字母分成前后两l,每组13个,~码和译?br># 的算法相同,仅仅交换字母的这两个部分Q即Q[a..m] --> [n..z] ?[n..z]
# --> [a..m] ?ROT13 用简易的手段使得信g不能直接被识别和?br># 读,也不?x)被搜?ch)匚wE序用通常的方法直接找到。经常用?USENET 中发表一
# 些攻?yn)L或令h不快的言论或有简单保密需要的文章?br># ׃ ROT13 是自逆算法,所以,译码和编码是同一个过E?/p>
----------------------------------------
# 好玩的东?br>:h 42 : 也可以访?http://www.google.com/search?q=42
: W一个结果就?News. Douglas Adams 1952 - 2001.
: Floor 42 extends its deepest sympathies to
: the family, friends, and fans of Douglas Adams.
:h holy-grail
:h!
----------------------------------------
# 标记和移?br>'. : 跛_最后修改的那一?(有用)(ft,怎么又是q个评h(hun))
`. : 不仅跛_最后修改的那一行,q要定位C改点
<C-O> : 依次沿着你的跌{记录向回?(从最q的一ơ开?
<C-I> : 依次沿着你的跌{记录向前?br>:ju(mps) : 列出你蟩转的
:help jump-motions
:history : 列出历史命o(h)记录
:his c : 命o(h)行命令历?br>:his s : 搜烦(ch)命o(h)历史
q/ : 搜烦(ch)命o(h)历史的窗?br>q: : 命o(h)行命令历史的H口
:<C-F> : 历史命o(h)记录的窗?br>----------------------------------------
# ~写和键盘映?原文中文件D例都用了(jin)c:/aaa/xQ偶全给他改?path/file?jin),哼?
:map <f7> :'a,'bw! /path/file
# 译释Qmap是映像一个normal模式下的?br># q里是把F7键映像成把标记a到标记b中间的内容另存(sh)ؓ(f)一个文?path/file
# 标记(mark)的方法:(x)把光标移动到需要标记的地方Q输入mQ然后输入标记名Q例如a
# 译释Q把F8键映像成在当前位|插入文?path/file的内?br>:map <f11> :.w! /path/file2<CR>
# 译释Q?Q点P(j)表示当前?br># 所以F11是把当前行存(sh)ؓ(f)/path/file2
# 最后的<CR>表示一个回?br>:map <f12> :r /path/file2<CR>
:ab php : 列出php表示的羃?br># 译释Q定义一个羃写用:(x):iab hm hmisty
# 一个有的现象是,它列出的?x)是php和它的前子串开头的~写
# 例如Q有q么几个~写Q?br># h => hmisty1 , hm => hmisty2 , hmi => hmisty3, m => hmisty4
# 那么使用 :ab hm?x)显C么几个羃写:(x)hm ?h
# 而不是你惌中的 hm ?hmi
# 译释Q一般而言Q我们称q些逗号开始的l合键ؓ(f)「逗号命o(h)?br># 不过hmisty更喜Ƣ用;构成「分号命令?br># 而且不是用map,而是用imap
# 因ؓ(f)偶懒么,懒得?lt;Esc>,所以直接在insert模式下就执行命o(h)?br># Z么用分号呢?因ؓ(f)我最常用它写E序?br># perl/C/C++/object pascal/javaQ都是用分号l束一个语?br># 我们一般很在分号后面q箋(hu)写其它字W?br># 所以用「分P其它键」就很少?x)在输入的时候造成冲突
<ESC> : Esc
<LEADER> : 转义W号 \
<BAR> : 道W号 |
----------------------------------------
# 列出寄存?Registers)
:reg : 昄所有当前的registers
"1p : "表示引用registerQ?表示一个名字叫?的registerQ?br>: p是_脓(chung)QpasteQ命?br># 译释Q?也用来定义register
# 先输?",表示定义register
# 然后输入名字Q如0~9,a~z
# 然后执行删除或复制命令,如dd或yQ?br># 或者是visual模式下的d(删除选中的部?或y(复制选中的部?
# 则被删除或复制的部分p存入?jin)这个命名的register
#
# 观察Q一个特D的register, "" Q里面存储了(jin)一个匿名的删除/复制
# 在你执行dd或y的时候,被作用的部分被存C(jin)""?br># q些和perl是多么像?br>----------------------------------------
# Useful trick
"ayy@a : 把当前行作ؓ(f)一个Vim命o(h)来执?br># 译释Q?ayy 是定义当前行到register aQ然后@a是执行register a中存储的指o(h)
# yy: 复制一?br># 10yy: 复制从此向下?0?/p>
----------------------------------------
# 从其它程序获取输?(需要外部程?
:r!ls.exe : dls的输出到当前位置
!!date : ddate的输?(但是?x)替换当前行的内?
# 译释Q其实你输入?!后,vimp动{换到 :.! {待你l输?/p>
:%!sort -u : 使用sortE序排序整个文gQ用l果重写文gQ?br># 译释Q?表示整个文g的所有行
# !sort表示执行外部命o(h)sort
# -u是sort的参敎ͼman sort看看Q这个参数的意义是合q相同的?br># u是unique,如果两行内容相同Q则l果中只保留一行的?/p>
# 译释Q?表示使用filterQ?}表示filter的对象是从当前行开始向后数一D?br># D落指到I处结束,不包括空?br># 其实你一旦输?!1}Qvimp动计当前段落应该到那一?eg.+5)Q然后生?br># :.,.+5! {待之后输入sort -uQ回车,完成操作
# .表示当前行,.+5当然是当前行向后数5?br>----------------------------------------
# 多文檔操?(基础)
# 译注Q用 :ls! 可以昄出当前所有的buffer
:bn : 跌{C一个buffer
:bp : 跌{C一个buffer
:wn : 存盘当前文gq蟩转到下一?又是「超U?.....?ft!)
:wp : 存盘当前文gq蟩转到上一?br>:bd : 把这个文件从buffer列表中做?br>:bun : 卸掉buffer (关闭q个buffer的窗口但是不把它从列表中做掉)
:badd file.c : 把文件file.cd到buffer列表
:b 3 : 跛_W?个buffer
:b main : 跛_一个名字中包含main的buffer,例如main.c
: (ultraQ这个怎么译Q?()
:sav php.html : 把当前文件存?sh)php.htmlq打开php.html
:sav! %<.bak : 换一个后~保存
:e! : q回C改之前的文g(修改之后没有存盘)
:w /path/% : 把文件存C个地?br>:e # : ~辑标记?的buffer(q个buffer必须含有一个可~辑的文?
: 用ls命o(h)p看到哪一个buffer?
: %a表示当前正在~辑的buffer
: u 表示不能~辑或者已l被做掉的buffer
:e #3 : ~辑~号?的buffer(q个buffer必须含有一个可~辑的文?
:rew : 回到W一个可~辑的文?br>:brew : 回到W一个buffer
:sp fred.txt : 在一个水q_割的H口中打开文gfred.txt
# 译注Qvs fred.txt可以实现垂直分割
:sball : 把当前所有含有可~辑文g的buffer昄C个分割窗口中
: (偶该考虑把super译?高指o(h) ?ft)
:map <F5> :ls<CR>:e # : 在normal模式下按F5键,则会(x)昄所有含有一?/p>
: 输入后回车,则编辑这个buffer
# 译注Q这是一个键盘绑?/p>
----------------------------------------
# 在分割窗口中快速切?br>:map <C-J> <C-W>j<C-W>_
# 译注Q原文此处有误,前面应该加上冒号
# q是一个键盘绑定,把Ctrl-J定义成切换到下一个窗口ƈ最大化
:map <C-K> <C-W>k<C-W>_
----------------------------------------
# 命o(h)录制 (最x(chng)巧,ft)
qq #录制到q
.. #输入一pd复杂的指?br>q #再次按q停止录制
@q #执行q中存储的指o(h)
@@ #重复执行
# ~辑register/录制
"ap #把register a中的内容贴到当前位置
.. #现在你可以修改它?br>"add#删除之,重新存入register a
@a #执行register a中的指o(h)
----------------------------------------
# _vimrc基础
:set incsearch : 实时匚w你输入的内容
:set wildignore=*.o,*.obj,*.bak,*.exe : tab键的自动完成现在?x)忽略这?br>:set shiftwidth=4 : 现在自动~进是4个字W?br># 译注Q一个tab位通常?个字W?br># 所以,我们q要讑֮ :set tabstop=4Q这P所有的~进都是4字符?br># emacs默认是4字符~进吧?
:set vb t_vb=". : 沉默方式(不要叫beepQ?
----------------------------------------
# 加蝲windows iexplorer来浏?我想q只有在windows下用gvim才能用到)
:nmap ,f :update<CR>:silent !start c:\progra~1\intern~1\iexplore.exe file://%:p
# 译释Qnmap是做一个normal模式下的键盘l定
# q里l定?jin)一个逗号命o(h) ,f
# :update是写q个文gQ与:w不同Q它只有当文件被修改?jin)的时候才?br># :silent别让弹出H口报告执行l果
# !...后面是执行windows命o(h)?jin)。呵呵,去问bill gates什么意思吧?br># 不过偶用gvim 6.1试过?jin),好用Q?/p>
----------------------------------------
# 用VIM~辑ftp文g
:cmap ,r :Nread ftp://209.51.134.122/public_html/index.html
:cmap ,w :Nwrite ftp://209.51.134.122/public_html/index.html
# 译注Q原文丢׃(jin)开头的冒号
# cmap是命?command)模式l定
# q一句就是开始编辑一个ftpq程的文Ӟft
----------------------------------------
# 附加C个register (是用大写的register名字啦!)
"a5yy #复制5行到a?br>10j #下移10?br>"A5yy #再添?行到a?br>----------------------------------------
[I : 昄光标处的狭义字可以匹配的?高指o(h))
# 译注Q? 可以全文查找与光标处的狭义字相匹配的字,
# q在查找函数原型和实玎ͼ或者变量用的时候很有用
----------------------------------------
# 常规~进
:'a,'b>>
# 译释Q把mark a到mark b之间的内容进行两ơ羃q?/p>
:vnoremap < <gv
# 译释Q?vnoremap 重定义了(jin)visual模式?< W号的含?br># 把它定义?<gv
# 卻I(x)?lt;向外~进Q然后gv重新选择上一ơ选择?jin)的区?br># q样在visual模式下就可以实现q箋(hu)?lt;而连l羃q了(jin)
:vnoremap > >gv
# 同里Q内~?br>----------------------------------------
# 查找Q译注:(x)先学?fn)正则表辑ּQ?br># 译注Q查扑֑令不用进?命o(h)模式Q直接按/可以了(jin)
# 如果没有修饰Q可以不要右边的/
# 和smth bbs差不多啦Q呵?br>/joe/e : 光标停留在匹配单词最后一个字母处
/joe/e+1 : 光标停留在匹配单词最后一个字母的下一个字母处
/joe/s : 光标停留在匹配单词第一个字母处
/^joe.*fred.*bill/ : ft,标准正则表达?br>/^[A-J]\+/ : 找一个以A~J中一个字母重复两ơ或以上开头的?br>/forum\(\_.\)*pent : 多行匚w
/fred\_s*joe/i : 中间可以有Q何空白,包括换行W\n
# 译注Q这个和perl不太一L(fng)?br>/fred\|joe : 匚wFRED或JOE
/\<fred\>/i : 匚wfred,fred必须是一个独立的单词Q而不是子?br># 译注Q这和perl也不太一Pperl是用\b做单词定界符?br>/\<\d\d\d\d\> : 匚w4个数?br>\<\d\{4}\> : 也是匚w4个数?br># 在visual模式下查?br>:vmap g/ y/<C-R>"<CR> : 匚w选中的高?sh)文?br># 译释Qvmap是在visual模式下的键盘映像
# 映像?jin)g/q个命o(h)l合
# y 把选中的高?sh)文字写入匿名register "
# / 打开搜烦(ch)模式
# <C-R> 准备_脓(chung)register
# " _脓(chung)?"中的内容
# <CR> 回RQ执?/p>
# 译释Q@#$&^*@#%&*#$@!
/fred\_s*joe/i : g上面有了(jin)Qft
/bugs\(\_.\)*bunny : 中间可以有无C?br>:h \_ : 看看关于 \_ 的帮?/p>
# 译释Qnmap 做一个normal模式下的键盘l定
# y q入复制状态,后面需要一个motion
# 接着q iw 指出?jin)这个motion,是inner word
# inner word也是狭义?lt;cword>Q但是和 w 不同
# w 是从光标位置开始向后看
# 而inner wordL把光标移到第一个字母,从而总能得到一个完整的狭义?br># 试一?gUw ?gUiw q道区别了(jin)Q呵c(din)?/p>
:bufdo /searchstr
----------------------------------------
# 替换
# 译注Q替换命令需要先q入:命o(h)模式
:%s= *$== : 删除行尾I白
:'a,'bg/fred/s/dick/joe/igc : 非常有用Q(ft,又来?jin)!Q?br># 译释Q?a,'b指定一个范_(d)(x)mark a ~ mark b
# g//用一个正则表辑ּ指出?jin)进行操作的行必d以被fred匚w
# 看后面,g//是一个全局昄命o(h)
# s/dick/joe/igc则对于这些满x(chng)件的行进行替?/p>
:%s= [^ ]\+$=&&= : 复制最后一?br>:%s= \f\+$=&&= : 一L(fng)功能
:%s= \S\+$=&& : ft,q是一?br># 反向引用Q或U记?br>:s/\(.*\):\(.*\)/\2 : \1/ : 颠倒用:分割的两个字D?br>:%s/^\(.*\)\n\1/\1$/ : 删除重复?br># 非贪婪匹配,\{-}
:%s/^.\{-}pdf/new.pdf/ : 只是删除W一个pdf
# 跨越可能的多?br>:%s/<!--\_.\{-}-->// : 又是删除多行注释Q咦Qؓ(f)什么要说「又」呢Q)(j)
:help /\{-} : 看看关于 非贪婪数量符 的帮?br>:s/fred/<c-r>a/g : 替换fred成register a中的内容Q呵?br># 写在一行里的复杂命?br>:%s/\f\+\.gif\>/\r&\r/g | v/\.gif$/d | %s/gif/jpg/
# 译注Q就是用 | 道?/p>
# ft, \不就是{义了(jin)么!q个和perl真是不同?jin)?/p>
:s/__date__/\=strftime("%c")/ : 插入旉?/p>
:%s:\(\(\w\+\s\+\)\{2}\)str1:\1str2:
:%s:\(\w\+\)\(.*\s\+\)\(\w\+\)$:\3\2\1:
# 把所有的form元素Q就是html里面的form啦)(j)攑ֈregister里?
# ft, 头疼Q不解释?br>:redir @*|sil exec 'g#<\(input\|select\|textarea\|/\=form\)\>#p'|redir END
:nmap ,z :redir @*<Bar>sil exec 'g@<\(input\<Bar>select\<Bar>textarea\<Bar>/\=fo
# 上面q一行不能完全显C,最好Copy Article下去?/p>
# 全局(global)昄命o(h)Q就是用 :gQ正则表辑ּ
# 译释Q?:g/{pattern}/{cmd} 是全局扑ֈ匚w的行
# 然后对这些行执行命o(h){cmd}
:g/\<fred\>/ : 昄所有能够ؓ(f)单词fred所匚w的行
:g/<pattern>/z#.5 : 昄内容Q还有行P呵呵
:g/<pattern>/z#.5|echo "==========" : 漂亮的显C,ft!
:g/^\s*$/d : 删除所有空?br>:g!/^dd/d : 删除不含字符?dd'的行
:v/^dd/d : 同上
# 译释Qv == g!Q就是不匚wQ?br>:g/fred/,/joe/d : not line based (very powerfull)
:v/./.,/./-1join : 压羃I
:g/^$/,/./-j : 压羃I
:g/<input\|<form/p : 或?要用\|
:g/^/pu _ : 把文中空行扩增一?(pu = put)
: 卻I(x)原来两行间有一个空行,现在变成2?br>:g/^/m0 : 按行{文章 (m = move)
:g/fred/t$ : 拯行,从fred到文件末?EOF)
:%norm jdd : 隔行删除
# 译释Q? 指明是对所有行q行操作
# norm指出后面是normal模式的指?br># j是下UM行,dd是删除行
:.,$g/^\d/exe "norm! \<c-a>" : 增加在BOL(beginning of line)处的数字
# 译注Q?,$ 指明命o(h)从当前行执行到最后一?br># 如果没有 .,$ 限定范围Q那么g//׃(x)Ҏ(gu)个文件进行操?br># exe 是执行后面的命o(h)l合
:g/fred/y A : d所有ؓ(f)fred所匚w的行到register a
:'a,'b g/^Error/ . w >> errors.txt
:g/./yank|put|-1s/'/"/g|s/.*/Print '&'/
----------------------------------------
# 全局命o(h)和替换命令联?(强大的编辑能?
:'a,'bg/fred/s/joe/susan/gic : 可以使用反向引用来匹?br>:g/fred/,/joe/s/fred/joe/gic : non-line based (ultra)
----------------------------------------
# 先找fredQ然后找joeQ然?a href="mailto:#$^$%^#$%^@%^%&">#$^$%^#$%^@%^%&%^*!
:/fred/;/joe/-2,/sid/+3s/sally/alley/gIC
----------------------------------------
# 复位向到register * ?_脓(chung)register *
:redir @* : 复位向命令的输出l果Q最下方命o(h)行上的结果)(j)
: 到register * (ft,* 代表0~1,a~z,..)
:redir END : l束复位?br># 处理_脓(chung)
"*yy : 上面讲过?jin),是复制到register *?br>"*p : 然后贴出?br>----------------------------------------
:redir >> out.txt : 复位向到一个文?br>----------------------------------------
# 重新格式化文?br>gq<CR>
gqap (a是motion p是段?visual模式))
ggVGgq 重新格式化整个文?br>----------------------------------------
# 对多个文档实施命?br>:argdo %s/foo/bar/ : Ҏ(gu)?args列表中的文档执行命o(h)
:bufdo %s/foo/bar/
:windo %s/foo/bar/
:argdo exe '%!sort'|w! : 使用外部命o(h)
----------------------------------------
# 命o(h)行的一些好玩的东东
gvim -h : Ȁzȝ时候激zd?Win32)
vi -h ?vim -h : q个是unix下用
ls | gvim - : ~辑一个数据流Q?br>gvim -o file1 file2 : 以分割窗口打开两个文g
vim -s "convert.vim" file.c
gvim -u NONE -U NONE -N
----------------------------------------
# GVIM 不同的地?br>gvim -d file1 file2 : vimdiff (比较不同)
dp : 把光标处的不同放到另一个文?br>do : 在光标处从另一个文件取得不?br>----------------------------------------
# Vim陷阱
# 在vim的正则表辑ּ中, + ?| 都必d转义W?\
# 心(j)Q这和perl不一P
/fred\+/ : 匚wfred或freddy但是不匹配free
----------------------------------------
# \v Q或叫做very magic (通常都是q么?可以取消转义W?br>/codes\(\n\|\s\)*where : 普通的正则表达?br>/\vcodes(\n|\s)*where : very magicQ| 不用?\ ?jin)?/p>
# 把东襉K到命o(h)?搜烦(ch)?(SUPER:偶不再翻译这U叹词了(jin))
<C-R><C-W> : 送一个狭义词
<C-R><C-A> : 送一个广义词
<C-R>- : 送一个小型删除寄存器register
<C-R>[0-9a-z] : 送一个命名寄存器register
<C-R>% : 送文件名q去 (#也行)
----------------------------------------
# 操作寄存?br>:let @a=@_ : 清除register a
:let @*=@a : 寄存器赋?br>:map <f11> "qyy:let @q=@q."zzz"
# 译注Q猜猜这个无聊的l定是什么意思?
----------------------------------------
# 关于帮助的帮?br>:h quickref : dVIM Quick Reference?有用Q?
:h tips : Vim自己的tips
:h visual<C-D><tab> : 得到一个关于visual关键词的帮助列表
: 然后用tab键去选择
:h ctrl<C-D> : 昄所有关于Ctrl的帮?br>:h :r : :ex冒号命o(h)
:h CTRL-R : 普通模式命?br>:h \r : \r在正则表辑ּ中是什么意思呢Q?br>:h i_CTRL-R : insert模式下的Ctrl-R
:h c_CTRL-R : 命o(h)?command-line)模式下的Ctrl-R
:h v_CTRL-V : visual模式下的Ctrl-V
:h tutor : VIM 指南
gvim -h : 关于 VIM 命o(h)的帮?br>vi/vim -h
<C-S>T : Control Shift T go backwards in help
: 偶不清楚有什么用:(
----------------------------------------
# 选项讄在哪里?
:scriptnames : 列出所有加载的 plugins, _vimrcs
:verbose set history : 昄history的值ƈ指出讄文g的位|?br>----------------------------------------
# 制作你自qVIM帮助
:helptags /vim/vim61/doc : 重徏 /doc 中所有的 *.txt 帮助文g
:help add-local-help
----------------------------------------
# 用外部程序来q行E序 (例如 perl :)
map <f2> :w<CR>:!perl -c %<CR>
# 译释Q?w<CR>写文?br># :!perl -c %<CR>用perl来运行当前文?br># 当前文g必须有文件名Q?br>----------------------------------------
# 插入DOS换行W?br>:%s/nubian/<C-V><C-M>&/g : Ctrl-V是一U{义,它说要解?lt;C-M>
:%s/nubian/<C-Q><C-M>&/g : 对于Win32应该q样
:%s/nubian/^M&/g : 你看到的^M是一个字W?br>:%s/nubian/\r&/g : 更好的Ş?br>----------------------------------------
# 把最后一个命令脓(chung)到当前位|?br>i<c-r>:
# 把最后一个搜索指令脓(chung)到当前位|?br>i<c-r>/
# 译释Qi是进入insert模式Q?br># Ctrl-r是开启插入模式下register的引?br># :?分别引用?jin)两个register的内?br>----------------------------------------
# 更多的完成功?br><C-X><C-F> :插入当前目录下的一个文件名到当前位|?br># 在insert模式下?br># 然后?Ctrl-P/Ctrl-N 页
----------------------------------------
# 替换一个visual区域
# 选择一个区域,然后输入 :s/Emacs/Vim/ {等Qvim?x)自动进?模式
:'<,'>s/Emacs/Vim/g : 前面?<,'>是vim自动d?br>----------------------------------------
# 在文件中插入行号(不是昄行号Q是插入Q?
:g/^/exec "s/^/".strpart(line(".")." ", 0, 4)
----------------------------------------
# 用VIM的方式来~号?br>:set number :昄行号
:set nonu :取消昄
:%s/^/\=strpart(line('.')." ",0,&ts)
:'a,'b!perl -pne 'BEGIN{$a=223} substr($_,2,0)=$a++'
#g有点问题,你试试看:)
#g不能工作Q你试试?)
----------------------------------------
# 高递增 ("真的很有?Qft)
" 把下面几句放?_vimrc #vimrc脚本?" 做行注释W?br>let g:I=0
function! INC(increment)
let g:I =g:I + a:increment
return g:I
endfunction
" 例如从mark a 到mark b 递增Q从223开始,步长?
:let I=223
:'a,'bs/$/\=INC(5)/
" (原文Qcreate a map for INC)
" 但是cab是清楚命令行~写啊?怎么回事Q?br>cab viminc :let I=223 \| 'a,'bs/$/\=INC(5)/
----------------------------------------
# 加密(心(j)使用Q不要忘?sh)(jin)密?
:h :X
----------------------------------------
# modeline (make a file readonly etc) must be in first/last 5 lines
# 不会(x)用,不翻?br>// vim:noai:ts=2:sw=4:readonly:
:h modeline
----------------------------------------
# Creating your own GUI Toolbar entry
# 对于text模式下的vim没用Q不M(jin)
amenu Modeline.Insert\ a\ VIM\ modeline <Esc><Esc>ggOvim:ff=unix ts=4 ss=4<CR>v
----------------------------------------
# 一个保存当前光标下的狭义字C个文件的函数
function! SaveWord() "q里?是强制覆盖以前的定义
normal yiw
exe ':!echo '.@0.' >> word.txt'
endfunction
map ,p :call SaveWord() #使用该函数的一个例?br>----------------------------------------
# 删除重复行的函数
function! Del()
if getline(".") == getline(line(".") - 1)
norm dd
endif
endfunction
# 双字节编?(non alpha-numerics)
:digraphs : 昄~码?br>:h dig : 帮助
i<C-K>e' : 输入 é
i<C-V>233 : 输入 é (Unix)
i<C-Q>233 : 输入 é (Win32)
ga : 查看字符的hex?br>----------------------------------------
# 文g名自动完?(例如 main_c.c)
:e main_<tab> : tab 键完?br>gf : 打开光标处广义字命名的文?(normal模式)
main_<C-X><C-F> : 文g名自动完?insert模式)
----------------------------------------
# Vim复杂使用
# 交换两个单词
:%s/\<\(on\|off\)\>/\=strpart("offon", 3 * ("off" == submatch(0)), 3)/g
----------------------------------------
# 把text文g转换成html文g(oh,ft)
:runtime! syntax/2html.vim : 转换 txt ?html
:h 2html : 看看帮助
----------------------------------------
# VIM 有一个内部自带的 grep 命o(h)
:grep some_keyword *.c : 得到一个包含some_keyword的c文g名列?br>:cn : M一个出现的位置
----------------------------------------
# 强制无后~文g的语法着色方?.pl
:set syntax=perl
# 取消语法着?br>:set syntax off
# 改变色彩主题 (在~vim/vim??/colors中的M文g)
:colorscheme blue
----------------------------------------
:set noma (non modifiable) : 防止修改
:set ro (Read Only) : 只读保护
----------------------------------------
# Sessions (打开一pd文g)
gvim file1.c file2.c lib/lib.h lib/lib2.h :?session"中加载一pd文g
:mksession : 生成一个Session文g (默认是Session.vim)
:q
gvim -S Session.vim : 重新d一个sessionQ也p取了(jin)所有文?ft
----------------------------------------
# 标记(tags) (跌{到subroutines/functions)
taglist.vim : 最行的插?br>:Tlist : 昄Tags (functions的列?
<C-]> : 跌{到光标处的function
: q个?Ctrl-] 和vim帮助中是一L(fng)
----------------------------------------
# Just Another Vim Hacker JAVH
# Juat Another Perl Hacker JAPHQ嘿?br>vim -c ":%s/^/WhfgTNabgureRIvzSUnpxre/|:%s/[R-T]/ /Ig|:normal ggVGg?"
# 译释Q呵呵,谁来解释一下吧Q?br># 其实不过是在Ȁzvim的时候执行了(jin)一个命?br># 先写入了(jin) Just Another Vim Hacker 的rot13~码
# 然后再译?br>----------------------------------------
l于d?jin),呵呵。好累啊Q?br>__END__
]]>
GVim v7Q主E序Q?CtagsQtaglist+omnicppcompleteQsupertab(插g)
一Q安?br>Q?,omnicppcomplete 的安装:(x)
Q-1,下蝲omnicppcomplete,解压可得C个文件夹Qautoload,after,docQ?分别复制到gvim的安装目录下的vimfiles文g夹中(ubuntu中ؓ(f)~/.vim)。这样omnicppcomplete安装完成了(jin)?br>Q?,ctags 安装
Q-1,下蝲Ctags最新win32版本Q当前是5.6Q?解压x(chng)一目录Q如c:\ctags56Q?q在pȝ环境变量中把dctags的安装\径(如path=c:\ctags56Q,x(chng)ctags也安装完成了(jin)(ubuntu 中直?sudo apt-get install ctags)?br>Q?,taglist 安装
Q-1,下蝲taglist插gQ解压得C个文件夹QdocQpluginQ,把里面的文g分别复制到vim安装目录下对应的文g夹中(ubuntu中ؓ(f)~/.vim)?br>Q?,supertab插g安装
Q-1,下蝲supertab插gQ复制supertab.vim到vim安装目录的plugin目录下,使用时只要直接按tab键,可以直接进行补全?/font>
二,配置
Q?,下蝲本文的附Ӟ解压可得C个文Ӟstltags,cpptags;q两个文件是Ҏ(gu)mingw5.3和c++ 标准库stl3.3制作的)(j),复制到某目录(C:\ctags56\)Q然后在_vimrc(ubuntu下ؓ(f)~/.gvimrc?usr/share/vim/gvimrc)中添加下列代码,使用时用TAB键选择提示的代码:(x)
-----------------------------
"setting for omnicppcomplete
set nocp
filetype plugin on
"下面的设|用于当用户预先声明namespace时也能自动补全代码(如用using std::stringQ?
let OmniCpp_DefaultNamespaces = ["std"]
" 讄代码提示H口的颜Ԍ默认为粉U色Q如附图1,下面的设|的效果如附?Q?
highlight Pmenu ctermbg=13 guibg=LightGray
highlight PmenuSel ctermbg=7 guibg=DarkBlue guifg=White
highlight PmenuSbar ctermbg=7 guibg=DarkGray
highlight PmenuThumb guibg=Black
"讄tags目录Q可以根据自q讄自动调整
set tags+=C:\ctags56\stltags
set tags+=C:\ctags56\cpptags
------------------------------
word_complete.vim
Insert模式下在输入的时候自动补全单词,如果补全正确可以按Tab键接受,否则可以不管它l输入或者按
Ctrl-nQCtrl-p切换补全?注意是输入三个字W后才开始补全?br>安装Q?br>1. 拯文g到[你的gvim的安装目录]\vimfiles\plugin\
2. Ȁz补全模?br>:call DoWordComplete()
3. 取消补全模式
:call EndWordComplete()
4. 自动加蝲补全模式
?vimrc或_vimrc文g中加?br>:autocmd BufEnter * call DoWordComplete()
下蝲Q?br>http://www.vim.org/scripts/script.php?script_id=73
c.vim
q个插g强Q提供了(jin)很多便于C/C++~程的功能,比如文g头模版,代码片断{?br>像帮助文档的头一句写的那? C/C++IDE for vim/gvim.具体如何的强大家q看帮助好?
安装:
q个相对地比较简?但是文g却是不少:
1. 拯cvim.zip到[你的gvim的安装目录]\vimfiles,
执行unzip,(注意,如果是window的unzip,请选择解压~到当前目录)
2. 你可以设|一些个Z息在.vimrc或_vimrc?例如:
let g:C_AuthorName = 'Moonz_wu'
let g:C_AuthorRef = 'Mn'
let g:C_Email = 'moonz.wu@gmail.com'
let g:C_Company = 'FSky co.'
3. 重新启动vim,q执行命?br>:help [你的gvim的安装目录]\vimfiles\doc来生帮助文?
基本上完成这些步?q个cvim插g可以用?不过q里要说明的是解压完?你会(x)看到两个压羃文g
c-templates-comm.zip和c-templates+comm.zip,q两个区别就是c-templates+comm.zip带方法注?
c-templates-comm.zip没有, 你可以解压其中一?q拷贝到.\plugin\templates.
你可以在解压完的doc中找C个hotkey.pdf文g,里面讲了(jin)cvim定义的所有快捷键.
crefvim.vim
为VIM定制的C参考手册,q样对于语法或者函C清楚的地方可以方便的查找?br>安装Q?br>1.脚本拷贝到你的本地目录中,
Unix: ~/.vim/plugin
windows: [你的gvim的安装目录]\vimfiles\plugin
2. 帮助文?即doc下的文g)拯?br> Unix: ~/.vim/doc
Windows: [你的gvim的安装目录]\vimfiles\doc
3.语法文?即syntax下的文g)拯?br> Unix: ~/.vim/after/syntax
Windows: [你的gvim的安装目录]\vimfiles\after\syntax
然后启动vim将自动的加载脚本。然后在vim执行以下命o(h)
Unix
:helptags ~/.vim/doc
windows
:helptags [你的gvim的安装目录]\vimfiles\doc
呵呵Q那么搞定后你在vim中写入一个atoi(),q行命o(h)\crQ看看效果?br>q个是crefvim帮助里的(<Leader> = \)
<Leader>cr normal mode: get help for word under cursor
Memory aid cr: (c)-(r)eference
<Leader>cr visual mode: get help for visually selected text
Memory aid cr: (c)-(r)eference
<Leader>cw: prompt for word CRefVim should search for
Memory aid cw: (c)-reference (w)hat
<Leader>cc: jump to table of contents of the C-reference manual
Memory aid cc: (c)-reference (c)ontents
具体q需看看帮助?br>下蝲:
http://www.vim.org/scripts/script.php?script_id=614
q里有一很好的讲vim插g的文?我也借鉴?jin)一部䆾^_^!
http://www.pconline.com.cn/pcedu/soft/gj/photo/0609/877033_5.html
VIM script包含几大c?
VIM的script安装非常单,下蝲的script文g或者压~包里头都有安装说明Q在VIM的安装目录(比如C:\VIM64Q下面有一个vimfiles目录Q把script攑ֈvimfiles目录下即可。对于多用户pȝQ可以在HOME目录Q一般是c:\Documents and Settings\ <USER_NAME>\Q下面徏立一个vimfiles目录Q把script攄到这里?/p>
下面是一些好用的VIM插gQ具体用办法请参考各自。vim文g头部的注释?/p>
BufExplorer.vim *****
http://www.vim.org/scripts/script.php?script_id=42
q个插g可以使编辑多文g更加方便Q装完插件后Normal mode下输入\be卛_打开~冲区列表,光标攄在某一个文件上按回车即可打开q个文gQ而缓冲区列表自动关闭?/p>
Taglist.vim *****
http://www.vim.org/scripts/script.php?script_id=273
q个插g可以实现cL者函数列表功能,支持C/C++QjavaQperlQpythonQtclQsqlQphp{语aQ它可以在VIM中创Z个窗口,列出~辑的源文g中的cR函数、变量定义列表,而且更方便的是这个列表也插入在了(jin)右键菜单中,分类存放Q访问非常方ѝ?/p>
TabBar.vim ***
http://www.vim.org/scripts/script.php?script_id=1338
q个插g实现?jin)类似UltraEdit中的标签늚功能Q而且能通过Alt-<n>来切换,<n>代表1-9?/p>
minibufexpl.vim ***
http://www.vim.org/scripts/script.php?script_id=159
实现?jin)类似UltraEdit中的标签也功能?/p>
c.vim ***
http://www.vim.org/scripts/script.php?script_id=213
提供?jin)很多便于C/C++~程的功能,比如文g头模版,代码片断{?/p>
CRefVim **
http://www.vim.org/scripts/script.php?script_id=614
为VIM定制的C参考手册,q样对于语法或者函C清楚的地方可以方便的查找?jin)?/p>
latex-suite *****
http://www.vim.org/scripts/script.php?script_id=475
http://vim-latex.sf.net/
提供?jin)很多便于编辑TeX/LaTeX文g的功能,比如在VIM里面~译或者预览、自动插入TeX标记{?/p>
word_complete.vim ***
http://www.vim.org/scripts/script.php?script_id=73
Insert模式下在输入的时候自动补全单词,如果补全正确可以按Tab键接受,否则可以不管它l输入或者按Ctrl-nQCtrl-p切换补全?注意是输入三个字W后才开始补全?/p>
Vim JDE
http://www.vim.org/scripts/script.php?script_id=1213
支持C/C++{的自动完成Q需要VIM 7.0Q编译时打开+rubyҎ(gu))(j)Q?/p>
cppcomplete.vim **
http://www.vim.org/scripts/script.php?script_id=527
能自动完成C/C++/Java的结构或cL员,注意它的快捷键是Alt-lQ字母LQ不是Alt-i?/p>
The NEAD Commenter **
http://www.vim.org/scripts/script.php?script_id=1218
在许多类型的文g中方便的加上注释或者取消注释?/p>
winmanager
http://www.vim.org/scripts/script.php?script_id=95
把标准的File Explorer以及(qing)Buffer Explorer插g集成在一P提供C~辑器中常见的文件列表和~冲区列表功能?/p>
sketch.vim ***
http://www.vim.org/scripts/script.php?script_id=705
Draw with mouse: boxes, arrows, lines, fills. Transparent/opaque drag and drop.照着它的教程做一遍,你就?x)震g它的创意?jin)?/p>
DrawIt.vim **
http://www.vim.org/scripts/script.php?script_id=40
可以方便的画q线图?/p>
MultipleSearch ***
http://www.vim.org/scripts/script.php?script_id=479
MultipleSearch2.vim ***
http://www.vim.org/scripts/script.php?script_id=1183
Mark.vim ***
http://www.vim.org/scripts/script.php?script_id=1238
otf.vim **
http://www.vim.org/scripts/script.php?script_id=634
q些插g可以同时高(sh)昄多次搜烦(ch)l果Q这个特性非常有利于昄代码中某些变量或函数的调用位|?/p>
SearchComplete.vim *
http://www.vim.org/scripts/script.php?script_id=474
可以?搜烦(ch)时按Tab补全要搜索的单词?/p>
Vim Intellisense
http://insenvim.sourceforge.net
思义Q此插g用于lVIM提供完成功能Q支持C++QC#QJavaQJSPQHTMLQSQLQXMLQ笔者安装后一直懒得配|,也就没用上?/p>
project
http://www.vim.org/scripts/script.php?script_id=69
提供一些IDE功能Q看介绍g很不错?/p>
JavaBrower
http://www.vim.org/scripts/script.php?script_id=588
提供文g中Javacȝ?wi)状列表?/p>
vimspell
http://www.vim.org/scripts/script.php?script_id=465
ispell or aspell based spell checker with fly-spelling?/p>
cream
http://cream.sourceforge.net/
一套配|文Ӟ可以把VIM的界面改成CUAQCommon User AccessQ模型,降低VIM的学?fn)难度,个h不推荐这U做法,不过其中有些高配置值得学习(fn)Q有意思的是Emacs也有cM的项? EasymacsQEmacsW32Q?/p>
IComplete
http://icomplete.sf.net
搭配VIM 7.0的Omni CompleteQ可以做到C/C++的智能完成功?
The motion commands can be used after an operator command, to have the command
operate on the text that was moved over. That is the text between the cursor
position before and after the motion. Operators are generally used to delete
or change text. The following operators are available:
|c| c change
|d| d delete
|y| y yank into register (does not change the text)
|~| ~ swap case (only if 'tildeop' is set)
|g~| g~ swap case
|gu| gu make lowercase
|gU| gU make uppercase
|!| ! filter through an external program
|=| = filter through 'equalprg' or C-indenting if empty
|gq| gq text formatting
|g?| g? ROT13 encoding
|>| > shift right
|<| < shift left
|zf| zf define a fold
|g@| g@ call function set with the 'operatorfunc' option
在函CUd光标
[[ 转到上一个位于第一列的“{”
]] 转到下一个位于第一列的“{”
{ 转到上一个空?br> } 转到下一个空?br> gd 转到当前光标所指的局部变量的定义
* 转到当前光标所指的单词下一ơ出现的地方
# 转到当前光标所指的单词上一ơ出现的地方
括号的匹?br> % 用来q行括受中括号和大括号的匹?br>
taglist帮助文g
<CR> 跛_光标下tag所定义的位|,用鼠标双?yn)Ltag功能也一?br>o 在一个新打开的窗口中昄光标下tag
<Space> 昄光标下tag的原型定?br>u 更新taglistH口中的tag
s 更改排序方式Q在按名字排序和按出现顺序排序间切换
x taglistH口攑֤和羃?yu),方便查看较长的tag
+ 打开一个折叠,同zo
- tag折叠hQ同zc
* 打开所有的折叠Q同zR
= 所有tag折叠hQ同zM
[[ 跛_前一个文?br>]] 跛_后一个文?br>q 关闭taglistH口
<F1> 昄帮助
""""""""""""""""""""""""""""""
" Tag list (ctags)
""""""""""""""""""""""""""""""
if MySys() == "windows" "讑֮windowspȝ中ctagsE序的位|?/span>
let Tlist_Ctags_Cmd = 'ctags'
elseif MySys() == "linux" "讑֮windowspȝ中ctagsE序的位|?/span>
let Tlist_Ctags_Cmd = '/usr/bin/ctags'
endif
let Tlist_Show_One_File = 1 "不同时显C多个文件的tagQ只昄当前文g?/span>
let Tlist_Exit_OnlyWindow = 1 "如果taglistH口是最后一个窗口,则退出vim
let Tlist_Use_Right_Window = 1 "在右侧窗口中昄taglistH?/span>