li3的笔记 https://bbs.21ic.com/?12283 [收藏] [复制] [RSS]

日志

最新 最佳VIM技巧 翻译

已有 4262 次阅读2006-10-14 16:36 |个人分类:vim与gvim技巧|系统分类:原稿与翻译| vim, gvim, 使用, 技巧, 最好

 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;:文档来源: http://www.rayninfo.co.uk/vimtips.html                              
;:翻译参考: 没有记,请原作者见谅                                                
;:文档日期: 2015年7月7日17时48分52秒
;:更新记录:                                                                     
;:作  者: li3                                                                 
;:生成工具: 2Html.vim                                                           
;:++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;:--------------------------------------------------------------------------------
;:如果你使用的是MS-Windows,可能有的键已经被定义为Windows中的一些默认功能键。如果不
;:想这样,请编辑$VIM\mswin.vim
;:--------------------------------------------------------------------------------
/joe/e                              ;: 设置光标到匹配"joe"的末尾
/joe/e+1                            ;: 设置光标到匹配"joe"的末尾再后移一位
3/joe/e+1                           ;: find 3rd joe cursor set to End of match plus 1 [C]
/joe/s-2                            ;: 设置光标到匹配"joe“的开头再前移两位
/joe/+3                             ;: 搜索“joe” 找到后将光标下移3行
/^joe.*fred.*bill/                  ;: 匹配以'j'开头且"joe"到"fred"到"bill"之间至少有一个字符
/^[A-J]\+/                          ;: 搜索行首非'A'到’J‘重复一次以上的行
/begin\_.*end                       ;: 多行匹配
/fred\_s*joe/i                      ;: 多行搜索可以是任何空白字符包括\n,\t等等
/fred\|joe                          ;: 搜索fred或者joe
/.*fred\&.*joe                      ;: 搜索同时包括fred跟joe的行
/\<fred\>/                          ;: 搜索独立的单词fred
/\<\d\d\d\d\>                       ;: 搜索独立的4位数字
/\D\d\d\d\d\D                       ;: 搜索恰好4位的数字
/\<\d\{4}\>                         ;: 同/\<\d\d\d\d\>
/\([^0-9]\|^\)%.*%                  ;: 查找以非0~9数字或在行首的%%所包括的内容
;:" 查找空行
/^\n\{3}                            ;: 匹配三连续的空行
/^str.*\nstr                        ;: find 2 successive lines starting with str
/\(^str.*\n\)\{2}                   ;: find 2 successive lines starting with str
;:" 使用正则表达式组查找
/\(fred\).*\(joe\).*\2.*\1
;:" 正则表达式重复
/^\([^,]*,\)\{8}
;:" visual模式下搜索
:vmap // y/<C-R>"<CR>               ;: visually模式下的键盘映射,把//映射成匹配当前选中的文本
:vmap <silent> // y/<C-R>=escape(@",'\\/.*$^~[]')<CR><CR>          ;: 包括空白字符
;:" \zs 和 \ze 匹配原 :h /\zs
/<\zs[^>]*\ze>                      ;: 匹配<与>所包含的内容
;:" 零宽度匹配 :h /\@=
/<\@<=[^>]*>\@=                     ;: 查找<与>所包含的内容
/<\@<=\_[^>]*>\@=                   ;: 多行匹配<与>所包含的内容
;:" 多行查找 \_ 的意思是包括换行符
/<!--\_p\{-}-->                     ;: 匹配<与>所包含的所有内容
/fred\_s*joe/                       ;: 匹配fred开始到joe,之间一定得是空白字符
/bugs\(\_.\)*bunny                  ;: 匹配所有bugs到bunny的字符串
:h \_                               ;: help
;:" 查找函数声明,nmap为normal模式下的键盘映射
:nmap gx yiw/^\(sub\<bar>function\)\s\+<C-R>"<CR>
;:" 查找多个文件
:bufdo /searchstr/                  ;: 在多个文件缓冲区里执行查找
;:" 更好的多文件查找定位方法
:bufdo %s/searchstr/&/gic           ;: 在多个文件缓冲区里查找,按下n停止
;:" 怎样不使用 / 来查找网址
?http://www.vim.org/                ;: 向后查找
;:" 查找指定字符以外的字符串
/\c\v([^aeiou]&\a){4}               ;: 查找4个辅音字母
/\%>20l\%<30lgoat                   ;: 查找20行与30行之间的 goat *N*
/^.\{-}home.\{-}\zshome/e           ;: 查找此行中有两个 "home" *N*
:%s/home.\{-}\zshome/alone          ;: 只在有home的行查找 *N*
;:" 只在有tongue的行内查找
^\(.*tongue.*\)\@!.*nose.*$
\v^((tongue)@!.)*nose((tongue)@!.)*$
.*nose.*\&^\%(\%(tongue\)\@!.\)*$
:v/tongue/s/nose/&/gic
'a,'bs/extrascost//gc       : trick: restrict search to between markers (answer n) [N]
;:-----------------------------------------------------------------------------
;:#最佳替换
:%s/fred/joe/igc                    ;: 普通替换命令
:%s//joe/igc                        ;: 用最后一次查找内容替换 *N*
:%s/~/sue/igc                       ;: 用最后一次替换内容替换 *N*
:%s/\r//g                           ;: 删除 DOS 的换行符 ^M
;:" 你的文本文件是否乱七八糟的排成一行?使用如下命令
:%s/\r/\r/g                         ;: 转换 DOS 回车符 ^M 为真正的回车符
:%s= *$==                           ;: 删除行尾空白
:%s= \+$==                          ;: 同上
:%s#\s*\r\?$##                      ;: 删除尾部空白和dos换行符
:%s#\s*\r*$##                       ;: 同上
;:" 删除空行
:%s/^\n\{3}//                       ;: 删除连续3个空行
:%s/^\n\+/\r/                       ;: 压缩空行,多个替换为一个
:%s#<[^>]\+>##g                     ;: 删除html的tag部分
:%s#<\_.\{-1,}>##g                  ;: 多行删除 html 的tags (非贪婪方式)
:%s#.*\(\d\+hours\).*#\1#           ;: Delete all but memorised string (\1) [N]
:%s#><\([^/]\)#>\r<\1#g             ;: split jumbled up XML file into one tag per line [N]
 %s/</\r&/g                         ;: simple split of html/xml/soap  [N]
:%s#<[^/]#\r&#gic                   ;: simple split of html/xml/soap  but not closing tag [N]
:%s#<[^/]#\r&#gi                    ;: parse on open xml tag [N]
:%s#\[\d\+\]#\r&#g                  ;: parse on numbered array elements [1] [N]
;:"VIM 最有力的替换
:'a,'bg/fred/s/dick/joe/igc         ;: 非常有用
                                    ;# 译释:''a,''b指定一个范围:mark a ~ mark b 
                                   ;# g//用一个正则表达式指出了进行操作的行必须可以被fred匹配
                                   ;# 看后面,g//是一个全局显示命令
                                   ;# s/dick/joe/igc则对于这些满足条件的行进行替换
;:" 复制列
:%s= [^ ]\+$=&&=                    ;: 复制最后一列
:%s= \f\+$=&&=                      ;: 复制最后一列
:%s= \S\+$=&&                       ;: 复制最后一列
;:" 记忆(反向引用)
:%s#example#& = &#gic               ;: duplicate entire matched string [N]
:%s#.*\(tbl_\w\+\).*#\1#            ;: 显示所有 tbl_*   *N*
:s/\(.*\):\(.*\)/\2: \1/            ;: 将两个字段颠倒
:%s/^\(.*\)\n\1$/\1/                ;: 删除重复行
 :%s/^\(.*\)\(\n\1\)\+$/\1/         ;: delete multiple duplicate lines [N]
;:" 非贪婪匹配 \{-}
:%s/^.\{-}pdf/new.pdf/              ;: 删除第一个pdf
 %s#^.\{-}\([0-9]\{3,4\}serial\)#\1#gic : delete up to 123serial or 1234serial [N]
;:" use of optional atom \?
:%s#\<[zy]\?tbl_[a-z_]\+\>#\L&#gc   ;: lowercase with optional leading characters
;:" 跨越尽量多的行
:%s/<!--\_.\{-}-->//                ;: 删除多行注释
:help /\{-}                         ;: 查看非贪婪匹配的更多帮助
;:" 使用寄存器替换
:s/fred/<c-r>a/g                    ;: 将fred替换为寄存器a里的内容 #<c-r>为按下Ctrl与r
:s/fred/<c-r>asome_text<c-r>s/g
:s/fred/\=@a/g                      ;: 比较好的办法,不显示替换内容
;:" 在一行里写多种命令
:%s/\f\+\.gif\>/\r&\r/g | v/\.gif$/d| %s/gif/jpg/
:%s/a/but/gie|:update|:next         ;: 当使用 @: 来重复
;:" 或运算
:%s/suck\|buck/loopy/gc             ;: 替换suck或者buck(这里|不是管道)
:'a,'bs#\[\|\]##g                   ;: remove [] from lines between markers a and b [N]
:%s/\v(.*\n){5}/&\r                 ;: 每5行插入一行空行 *N*
;:" 调用vim函数
:s/__date__/\=strftime("%c")/       ;: 将__date__替换成当前日期,使用strftime函数
:inoremap \zd <C-R>=strftime("%d%b%y")<CR>    : insert date eg 31Jan11 [N]
;:" 处理列,替换所有在第三列中的str1
:%s:\(\(\w\+\s\+\)\{2}\)str1:\1str2:
;:" 交换第一列跟第四列
:%s:\(\w\+\)\(.*\s\+\)\(\w\+\)$:\3\2\1:
" format a mysql query
:%s#\<from\>\|\<where\>\|\<left join\>\|\<\inner join\>#\r&#g
;:" 过滤form中的内容放在寄存器里
:redir @*|sil exec 'g#<\(input\|select\|textarea\|/\=form\)\>#p'|redir END
:nmap ,z :redir @*<Bar>sil exec 'g@<\(input\<Bar>select\<Bar>textarea\<Bar>/\=form\)\>@p'<Bar>redir END<CR>
" substitute string in column 30 [N]
:%s/^\(.\{30\}\)xx/\1yy/
;:" 两位以上的数字减三(带进位。这个命令挺有趣)
:%s/\d\+/\=(submatch(0)-3)/
;:" 包含loc或者functions的行中的数字加6
:g/loc\|function/s/\d/\=submatch(0)+6/
;:" 比上面更好的方法
:%s#txtdev\zs\d#\=submatch(0)+1#g
:h /\zs                            ;查看帮助
;:" 前缀为gg的数字加6
:%s/\(gg\)\@<=\d\+/\=submatch(0)+6/
:h zero-width                      ;查看帮助
;:" 替换一个特定字符串为数字
:let i=10 | 'a,'bg/Abc/s/yy/\=i/ |let i=i+1 ;# 将yy转换成10,11,12等等
;:" 比上面的更精确
:let i=10 | 'a,'bg/Abc/s/xx\zsyy\ze/\=i/ |let i=i+1 # 将xxyy 转换成 xx11,xx12,xx13
;:" 将查找内容放入内存,然后用\zs进行简单替换
:%s/"\([^.]\+\).*\zsxx/\1/
;:" 将xx替换为此行内容
:nmap <leader>z :%s#\<<c-r>=expand("<cword>")<cr>\>#
;:" 将Vis选中的内容用<>括起来
:vmap <leader>z :<C-U>%s/\<<c-r>*\>/
 " substitute singular or plural
;:-----------------------------------------------------------------------------
;:" 下面举一些在替换中使用替换的例子
:'a,'bs/bucket\(s\)*/bowl\1/gic   *N*
;:" 多种分符可以被用在替换中
:%s,\(all/.*\)\@<=/,_,g             ;: 用 _ 替换 "all/"之后的 /
;:" 同样的功能
:s#all/\zs.*#\=substitute(submatch(0), '/', '_', 'g')#
:s#all/#&^M#|s#/#_#g|-j!            ;" 查找断行,并合并为一行
;:" 在替换命令中使用替换
:%s/.*/\='cp '.submatch(0).' all/'.substitute(submatch(0),'/','_','g')/
;:-----------------------------------------------------------------------------
;:" 全局显示命令
:g/gladiolli/#                      ;: 查找并显示匹配的行号
:g/fred.*joe.*dick/                 ;: 显示所有含有 fred,joe & dick的行
:g/\<fred\>/                        ;: 显示单一单词fred
:g/^\s*$/d                          ;: 删除所有空行
:g!/^dd/d                           ;: 删除不含字符串''dd''的行
:v/^dd/d                            ;: 同上
:g/fred/,/joe/d                     ;: 删除所有的从fred到joe
:g/fred/,/joe/j                     ;: Join Lines [N]
:g/-------/.-10,.d                  ;: 以-------为标记删除之前的10行
:g/{/ ,/}/- s/\n\+/\r/g             ;: 删除 {...}之间的空行
:v/\S/d                             ;: 删除空行
:v/./,/./-j                         ;: 压缩空行
:g/^$/,/./-j                        ;: 同上
:g/<input\|<form/p                  ;: 或运算
:g/^/put_                           ;: 双倍行宽 (pu = put)
:g/^/m0                             ;: 颠倒文件 (m = move)
:g/^/m$                     : No effect! [N]
:'a,'bg/^/m'b                       ;: 颠倒选中的 a 到 b
:g/^/t.                             ;: 重复行
:g/fred/t$                          ;: 拷贝行从fred到结尾
:g/stage/t'a                        ;: 拷贝行从stage 到 marker a(a为标记的位置)
:g/^Chapter/t.|s/./-/g      : Automatically underline selecting headings [N]
:g/\(^I[^^I]*\)\{80}/d              ;: 删除最少包含80个tab的行
;:" 隔行替换
:g/^/ if line('.')%2|s/^/zz /
;:" 查找标记a与b 间所有包含 "somestr"
;:" 复制所有"otherstr"后的行
:'a,'bg/somestr/co/otherstr/        ;: co(py) or mo(ve)
" as above but also do a substitution
:'a,'bg/str1/s/str1/&&&/|mo/str2/   ;" 范围同上,进行替换
:%norm jdd                          ;: 隔行删除
;:" 增加数字 (键入 <c-a>)           ;:#在MS-Windows中<c-a>已经被定义为全选
:.,$g/^\d/exe "norm! \<c-a>"        ;: 增加从当前行首到结尾的数字
:'a,'bg/\d\+/norm! ^A               ;: 增加数字
;:" 保存全局命令的结果 (注意必须使用添加模式) 你需要使用 qaq 清空寄存器a.
;:"save results to a register/paste buffer 存储结果到 寄存器/粘贴 到 a
:g/fred/y A                         ;: 添加配备行到寄存器到 a
:g/fred/y A | :let @*=@a            ;: 放入复制缓冲区
:let @a=''|g/Barratt/y A |:let @*=@a
" filter lines to a file (file must already exist)
:'a,'b g/^Error/ . w >> errors.txt  ;" 将查找内容放入一个文件 (文件必须存在)
;:" 复制每一行,然后在复制出来的每一行两侧加上一个 print '复制出来的内容'
:g/./yank|put|-1s/'/"/g|s/.*/Print '&'/
;:" 用文件中的内容替换字符串,-d 表示删除“标记”
:g/^MARK$/r tmp.ex | -d
;:" 精致的显示方法
:g/<pattern>/z#.5                   ;: 带行号显示
:g/<pattern>/z#.5|echo "==========" ;: 漂亮的显示
;:" 用 g// 执行正常命令
:g/|/norm 2f|r*                     ;: 替换第二个|为*
;:" 在新窗口中显示查找结果
:nmap <F3> :redir @a<CR>:g//<CR>:redir END<CR>:new<CR>:put! a<CR><CR>
;:-----------------------------------------------------------------------------
;:" 全局命令和替换命令联姻 (强大的编辑能力)
:'a,'bg/fred/s/joe/susan/gic        ;: 可以使用反向引用来匹配
:g/fred/,/joe/s/fred/joe/gic        ;: 非行模式(超级)
:/biz/,/any/g/article/s/wheel/bucket/gic:  ;:非行模式 *N*
;:-----------------------------------------------------------------------------
;:" 先找fred,然后找joe
:/fred/;/joe/-2,/sid/+3s/sally/alley/gIC
;:-----------------------------------------------------------------------------
;:" create a new file for each line offile eg 1.txt,2.txt,3,txt etc
;:" 将每一行的内容存成一个文件,文件名为 行号.txt  如 1.txt,2.txt 等
:g/^/exe ".w ".line(".").".txt"
"----------------------------------------
" chain an external command
:.g/^/ exe ".!sed 's/N/X/'" | s/I/Q/    [N]
"----------------------------------------
" Operate until string found [N]
d/fred/                                ;:delete until fred
y/fred/                                ;:yank until fred
c/fred/e                               ;:change until fred end
 v12|                                  ;: visualise/change/delete to column 12 [N]
;:----------------------------------------
" 重复编辑命令小总 *N*
.                              ;:最后一次编辑命令
:&                             ;:最后一次替换命令
:%&                            ;:在所有行进行最后一次替换命令
:%&gic                         ;:在所有行进行最后一次替换命令,需确认
g%                             ;:正常模式下进行最后一次替换
g&                             ;:在所有行进行最后一次替换命令
@@                             ;:执行最后一次记录
@:                             ;:最后一次命令模式下的指令
:!!                            ;:最后一次 !命令
:~                             ;:最后一次替换
:help repeating         ;:请参照帮助
;:----------------------------------------
"重复查找命令小总
;                              ;:最后一次 f, t, F or T
,                              ;:反向最后一次 f, t, F or T
n                              ;:最后一次查找 / 或 ?
N                              ;:反向最后一次查找 / 或 ?
;:-----------------------------------------------------------------------------
;:" 绝对精华
;:-----------------------------------------------------------------------------
* # g* g#                           ;: 查找当前光标下的单词(单个单词) (<cword>) (向前/向后)
%                                   ;: 匹配括号 {}[]()
.                                   ;: 重复上次操作
@:                                  ;: 重复上次的命令
matchit.vim                         ;: 适%能匹配 <script> <?php等标记
<C-N><C-P>                          ;: 插入模式下自动完成填词
<C-X><C-L>                          ;: 行自动完成(超级有用)
/<C-R><C-W>                         ;: 把单个<cword>单词放入搜索或者命令行
/<C-R><C-A>                         ;: 把字符串中有的单词<CWORD>放入搜索或者命令行
:set ignorecase                     ;: 忽略大小写
:set smartcase      : overrides ignorecase if uppercase used in search string (cool)
:syntax on                          ;: 打开语法高亮 Perl,HTML,PHP 等等
:set syntax=perl    : force syntax (usually taken from file extension)
:h regexp<C-D>                      ;: 按ctrl+d得到包含regexp的列表
                                    ;:  (按tab自动不齐)
;:-----------------------------------------------------------------------------
;:" 简单编辑更新 _vimrc文件
:nmap ,s :source $VIM/_vimrc        ;:普通模式下的键盘映射 ,s映射成加载用户目录下的
:nmap ,v :e $VIM/_vimrc
:e $MYVIMRC         : edits your _vimrc whereever it might be  [N]
_vimrc文件
:nmap ,v :e $VIM/_vimrc             ;:,v映射成打开_vimrc文件
" 怎样在不同的PC系统上有不同的变量  *N*
if $COMPUTERNAME == "NEWPC"
    ab mypc vista
else
    ab mypc dell25
endif
----------------------------------------
"splitting windows
:vsplit other.php       # vertically split current file with other.php [N]
;:-----------------------------------------------------------------------------
;:#VISUAL 模式 (方便增加 HTML 标签)
:vmap sb "zdi<C-R>z<ESC>            ;: 在 VISUALLY模式下将选中的文本前后分别加上
:vmap st "zdi<?= <C-R>z ?><ESC>     ;: 加上 <?= ?>
;:-----------------------------------------------------------------------------
;:"vim 7 tabs
vim -p fred.php joe.php             ;: 在新tab中打开文件
:tabe fred.php                      ;: 在新tab中打开 fred.php
:tab ball                           ;: 每一个文件一个tab
:close                              : close a tab but leave the buffer *N*
;:" vim 7  .vimrc 配置使用tabs
:nnoremap gf <C-W>gf
:cab      e  tabe
:tab sball                          ;: 改变所有buffer内的tab *N*
;:-----------------------------------------------------------------------------
;:" 浏览
:e .                                ;: 文件浏览器
:Exp(lore)                          ;: 浏览文件
:Sex(plore)                         ;: 分割窗口浏览文件
:browse e                           ;: 打开windows 的 ‘选择文件’对话
:ls                                 ;: 显示缓冲区
:cd ..                              ;: 设置当前目录位置
:args                               ;: 查看当前打开的所有文件
:pwd                                ;: Print Working Directory (current directory) [N]
:args *.php                         ;: 打开所有 *.php文件
:lcd %:p:h                          ;: 改变路径到当前编辑的文件
:cd :h                      : change to directory of current file [N]
:autocmd BufEnter * lcd %:p:h       ;: 放入.vimrc自动完成上面的命令
;:-----------------------------------------------------------------------------
;:" 缓冲区浏览(一直排名前10的vim脚本)
;:" 需要 bufexplorer.vim http://www.vim.org/script.php?script_id=42
\be                                 ;: 缓冲浏览器中查看缓冲列表
\bs                                 ;: 同上,但是分割窗口
;:-----------------------------------------------------------------------------
;:" 转换大小写
guu                                 ;: 将正行的字母转换成小写
gUU                                 ;: 将正行的字母转换成大写
Vu                                  ;: 转换选中的行(小写)
VU                                  ;: 转换选中的行(大写)
g~~                                 ;: 反向转换
vEU                                 ;: 转换词大写
vE~                                 ;: 反向转换词
ggguG                               ;: 将当前编辑文件内容全部转换成小写
;:" Visually 模式下选择所有的字母及数字 (放入 .vimrc文件中)
vmap ,c :s/\<\(.\)\(\k*\)\>/\u\1\L\2/g<CR>
" 使此行为标题
vnoremap <F6> :s/\%V\<\(\w\)\(\w*\)\>/\u\1\L\2/ge<cr> [N]
 " titlise a line
nmap ,t :s/.*/\L&/<bar>:s/\<./\u&/g<cr>  *N*
 " Uppercase first letter of sentences
:%s/[.!?]\_s\+\a/\U&\E/g            ;:" 大写所有句子的第一个字母
;:-----------------------------------------------------------------------------
gf                                  ;: 打开当前光标下或后的文件
:nnoremap gF :view <cfile><cr>      ;: 打开当前光标下或后的文件, 如果不存在则创建
ga                                  ;: 显示当前光标下单个字的ascii,十进制,十六进制……
ggVGg?                              ;: 将整个文件用rot13编码……(谁看得懂啊~~hoho)
ggg?G                               ;: 同上 (针对大文件)
:8 | normal VGg?                    ;: 将第八行用rot13编码
:normal 10GVGg?                     ;: 同上
<C-A>,<C-X>                         ;: 增加,减少当前光标下的数字
                                    ;: win32 用户需要重定义 CNTRL-A
<C-R>=5*5                           ;: 插入25 (小型计算器)
;:-----------------------------------------------------------------------------
;:" 几个彩蛋……
:h 42                               ;: also http://www.google.com/search?q=42
:h holy-grail
:h!
----------------------------------------
" disguise text (watch out) [N]
ggVGg?                          : rot13 whole file (toggles)
:set rl!                        : reverse lines right to left (toggles)
:g/^/m0                         : reverse lines top to bottom (toggles)
:%s/\(\<.\{-}\>\)/\=join(reverse(split(submatch(1), '.\zs')), '')/g   : reverse all text *N*
;:-----------------------------------------------------------------------------
;:"历史 标记 & 移动
'.                                  ;: 跳回最后编辑的行 (超有用)
`.                                  ;: 同上,但是定位编辑点
g;                                  ;: 跳转到比较旧的编辑位置(如果有的话) (vim6.3后的新功能)
g,                                  ;: 这个是较心的位置 (同上)
:changes :打出改变表
:h changelist                       ;: 查看“改变表跳转”的帮助
<C-O>                               ;: 依次沿着你的跳转记录向回跳 (从最近的一次开始)
<C-I>                               ;: 依次沿着你的跳转记录向前跳
:ju(mps)                            ;: 列出跳转轨迹
:help jump-motions
:history                            ;: 列出历史记录
:his c                              ;: 命令行历史
:his s                              ;: 搜索历史
q/                                  ;: 搜索命令历史的窗口
q:                                  ;: 命令行命令历史的窗口
:<C-F>                              ;: 历史窗口
;:-----------------------------------------------------------------------------
;:" 缩写 & 映射
:map <f7> :'a,'bw! c:/aaa/x
:map <f8> :r c:/aaa/x
:map <f11> :.w! c:/aaa/xr<CR>
:map <f12> :r c:/aaa/xr<CR>
:ab php                             ;: 查看以php开头的缩写
:map ,                              ;: 列出所有的映射(以逗号开始的)
;:" 允许映射 F10 (win32)
set wak=no                          ;: :h winaltkeys
;:" 映射中常使用的表示
<CR>                                ;: 回车
<ESC>                               ;: Esc
<LEADER>                            ;: 右斜杠
<BAR>                               ;: 管道符号
<BACKSPACE>                         ;: 退格键
<SILENT>                            ;: 不回显
#显示自定义的 RGB 颜色显示当前光标下的字符串 例如 #445588
:nmap <leader>c :hi Normal guibg=#<c-r>=expand("<cword>")<cr><cr>
:map <f2> /price only\\|versus/     :在map中需要用反斜线 \
" type table,,, to get <table></table>       ### Cool ###
imap ,,, <esc>bdwa<<esc>pa><cr></<esc>pa><esc>kA
" list current mappings of all your function keys
:for i in range(1, 12) | execute("map <F".i.">") | endfor   [N]
" for your .vimrc
:cab ,f :for i in range(1, 12) \| execute("map <F".i.">") \| endfor
 "chain commands in abbreviation
cabbrev vrep tabe class.inc \| tabe report.php   ## chain commands [N]
;:-----------------------------------------------------------------------------
;:" 简单的 PHP 调试将所有显示的变量放入寄存器a
iab phpdb exit("<hr>Debug <C-R>a ");
;:-----------------------------------------------------------------------------
;:" 使用寄存器来映射 (放入 .vimrc文件自动加载)
:let @m=":'a,'bs/"
:let @s=":%!sort -u"
;:-----------------------------------------------------------------------------
;:" 列出寄存器
:reg                                ;: 显示当前所有的寄存器
:reg a                              ;: 显示寄存器a中的内容
;:"1p....                           ;: 引用一个叫1的寄存器
:let @y='yy@"'                      ;: pre-loading registers (put in .vimrc)
qqq                                 ;: 清空寄存器 "q"
;:-----------------------------------------------------------------------------
;:" 一些有用的决窍
;:"ayy@a                            ;: 把当前行作为命令执行
yy@"                                ;: 上面的匿名寄存器
u@.                                 ;: 只执行键入的命令
"ddw                                ;: 将删除的内容放入寄存器 d *N*
"ccaw                               ;: 将改变的内容放入寄存器 c *N*
;:-----------------------------------------------------------------------------
;:" 从其它命令处获得输入(需要外部命令)
:r!ls.exe                           ;: 从ls 获得输入插入到当前位置
:put=glob('**')  : same as above                 [N]
:r !grep "^ebay" file.txt           ;: 从grep命令输入  *N*
:20,25 !rot13                       ;: rot13 行 20 到 25   *N*
!!date                              ;: 从date获得输入(删除当前行)
;:" 使用外部sort排序
:%!sort -u                          ;: 用sort排序整个文件(结果覆盖整个文件)
:'a,'b!sort -u                      ;: 从mark a到mark b之间的内容进行排序
!1} sort -u                         ;: 排序一个段落
:g/^$/;,/^$/-1!sort                 ;: 排序一个选中内容 ( ; 号非常重要)
" 用内部sort功能排序
:sort /.*\%2v/                      ;: 根据第二列排序 *N*
" number lines  (linux or cygwin only)
:new | r!nl #                  [N]
;:-----------------------------------------------------------------------------
;:" 多文件管理 (基本的)
:bn                                 ;: 跳转到下一个buffer
:bp                                 ;: 跳转到前一个buffer
:wn                                 ;: 保存当前buffer并跳转到下一个buffer (超有用)
:wp                                 ;: 保存当前buffer并跳转到前一个buffer
:bd                                 ;: 把当前文件从buffer移出 (超有用)
:bun                                ;: 卸载当前buffer (关闭这个窗口但是不移出)
:badd file.c                        ;: 添加file.c到buffer列表
:b 3                                ;: 前往第三个 buffer
:b main                             ;: 前往含有main的buffer中 比如说 main.c
:sav php.html                       ;: 把当前文件存为php.html并打开
:sav! %<.bak                        ;: 换一个后缀名保存 (旧方法)
:sav! %:r.cfm                       ;: 同上
:sav %:s/fred/joe/                  ;: 替换文件名
:sav %:s/fred/joe/:r.bak2           ;: 替换文件和后缀
:!mv % %:r.bak                      ;: 重命名当前文件
:help filename-modifiers
:e!                                 ;: 打开未修改之前的文件
:w c:/aaa/%                         ;: 存储文件到指定位置
:e #                                ;: 编辑标记为#的文件在buffer中
:rew                                ;: 返回到第一个可编辑的文件
:brew                               ;: 回到第一个buffer
:sp fred.txt                        ;: 分割窗口打开fred.txt
:sball,:sb                          ;: 把所有的 buffers分割显示在一个窗口中 (超有用)
:scrollbind                         ;: in each split window
:map <F5> :ls<CR>:e #               ;: 按F5显示所有buffer, 并显示行号
:set hidden                         ;: 允许不保存当前buffer而进行切换
;:-----------------------------------------------------------------------------
;:" 在分割窗口中快速切换
map <C-J> <C-W>j<C-W>_
map <C-K> <C-W>k<C-W>_
;:-----------------------------------------------------------------------------
;:" 录制命令 (最好的技巧)
qq                                  ;:# 录制命令放入 q寄存器
..                                  ;:输入一些命令
q                                   ;:# 录制结束
@q                                  ;:执行放入寄存器q中的内容
@@                                  ;:重复
5@@                                 ;:重复5次
qQ@qq                             : Make an existing recording q recursive [N]
;:" 编辑一个 寄存器/录制
"qp                                 ;:显示寄存器q中的内容(普通模式下)
<ctrl-R>q                           ;:显示寄存器q中的内容 (插入模式下)
                                    ;:" 你现在可以看到记录内容,随便编辑
"qdd                                ;:删除,重新存入q
@q                                  ;:执行 录制/寄存器 q
;:" 在可视块中运行记录
;:1) 定义记录/寄存器
qq:s/ to/ from/g^Mq
;:2) 定义可视块
V}
;:3) 键入                               ;: 将显示下面信息
:'<,'>
;:4)完成如下操作
:'<,'>norm @q
;:-----------------------------------------------------------------------------
;:"宏记录的map (命令方式结束)
"here we operate on a file with a recording, then move to the next file [N]
nnoremap ] @q:w!<bar>bd
;:-----------------------------------------------------------------------------
;:" 可视化模式提供一种灵活易用的方法选择一块文本供操作符使用
;:" 记出
v                                   ;: 进入可视化模式
V                                   ;: 进入可视化行选择模式
<C-V>                               ;: 进入可视化块选择模式
gv                                  ;: 重新选择
o                                   ;: 选择的区域头尾移动
"*y 或 "+y                          ;: 复制选择区域到粘贴板
V%                                  ;: 选择一个匹配段
V}J                                 ;: 合并一个段落
V}gJ                                ;: 合并一个段落,并保留空格
`[v`]                           : Highlight last insert
:%s/\%Vold/new/g                : Do a substitute on last visual area [N]
;:-----------------------------------------------------------------------------
;:" 删除选中的10行的前两个字符(不过这里应该假设是紧凑的排版格式,不能包含空格、
tab等字符的,可是经实验应该是钱3个字符才对啊??)
0<c-v>10j2ld
;:-----------------------------------------------------------------------------
;:" 如何用可视块拷贝几列
;:" 可视块(并非通常的 v 命令)
<C-V>,然后通过移动命令选择列 (win32 <C-Q>)
然后执行 c,d,y,r 等命令
;:-----------------------------------------------------------------------------
;:"用一个块替换另一个块
复制第一个块: ctrl-v move "ay
复制第二个块: ctrl-v move cctrl-o "aP <esc>
;:-----------------------------------------------------------------------------
" 文本对象 :h text-objects                                     *C*
daW                                 ;: delete contiguous non whitespace
di<   yi<  ci<                      ;: Delete/Yank/Change HTML tag contents
da<   ya<  ca<                      ;: Delete/Yank/Change whole HTML tag
dat   dit                           ;: Delete HTML tag pair
diB   daB                           ;: Empty a function {}
das                                 ;: delete a sentence
;:-----------------------------------------------------------------------------
;:" _vimrc 基本设置
:imap <TAB> <C-N>                   ;: set tab to complete [N]
:set incsearch                      ;: 输入搜索命令时,立即显示目前输入的模式对应的匹配。匹配的字符串被高亮。
:set wildignore=*.o,*.obj,*.bak,*.exe  ;: tab补全时忽略这些忽略这些
:set shiftwidth=3                   ;: 设置自动缩进为3个字符
:set vb t_vb=".                     ;: 安静模式,关闭响铃跟闪烁
:set browsedir=buffer               ;: 设置文件浏览使用的目录
                                    ;: 注:last 使用文件浏览器最近访问相同的目录。
                                    ;:     buffer 使用相关缓冲区的目录。
                                    ;:     current 使用当前目录。
                                    ;:     {path} 使用指定目录。
;:-----------------------------------------------------------------------------
;:" 启动windows中的IE
:nmap ,f :update<CR>:silent !start c:\progra~1\intern~1\iexplore.exe file://%:p<CR>
:nmap ,i :update<CR>: !start c:\progra~1\intern~1\iexplore.exe <cWORD><CR>
;:-----------------------------------------------------------------------------
;:" 在vim里打开ftp
cmap ,r :Nread ftp://209.51.134.122/public_html/index.html
cmap ,w :Nwrite ftp://209.51.134.122/public_html/index.html
gvim ftp://www.somedomain.com/index.html # 使用 netrw.vim
;:-----------------------------------------------------------------------------
;:" 向寄存器中添加内容 (使用相应寄存器名称的大写)
;:" 复制5行放入a寄存器,然后向下跳转10行再复制5行
"a5yy
10j
"A5yy
;:-----------------------------------------------------------------------------
[I                                  ;: 显示当前行中字符的所有匹配(超级有用)
;:-----------------------------------------------------------------------------
;:" 常规缩进
:'a,'b>>                            ;: 将mark a到mark b之间的内容进行两次缩进
;:" 虚拟模式下缩进 (可重复)
:vnoremap < <gv                     ;: 这是一个虚拟模式下的键盘映射
                                    ;: < 映射为<gv " < 意为向内缩进,
                                    ;: gv 上面已有解释,为重复上次选区
                                    ;: <gv 也就是先向内缩进然后再选择刚才的选区
                                    ;: 这样就可以只按 < 实现重复缩进了
:vnoremap > >gv                     ;: 向内缩进,原理同上
;:" 块缩进
>i{
>a{
;:" also
>% and <%                           ;:自己试试看吧,涉及到用 { 的语言很有用,比如c,c++等
==                            : index current line same as line above [N]
;:-----------------------------------------------------------------------------
;:" 重定向 & 粘贴到寄存器 * (*为寄存器名称)
:redir @*                           ;: 重定向命令到paste缓冲区
:redir END                          ;: 结束
:redir >> out.txt                   ;: 重定向到文件
;:" 操作粘贴缓冲区
"*yy                                ;: 复制到寄存器
"*p                                 ;: 从寄存器中粘贴一行
;:" 复制到粘贴缓冲区 (扩展模式)
:'a,'by*                            ;: 复制一个范围到粘
;:--------------------------------------------------------------------------------
;:如果你使用的是MS-Windows,可能有的键已经被定义为Windows中的一些默认功能键。如果不
;:想这样,请编辑$VIM\mswin.vim
;:--------------------------------------------------------------------------------
:'a,'by*                            ;: 复制一个范围到粘贴寄存器
:%y*                                ;: 复制一个括号匹配到粘贴缓冲区
:.y*                                ;: 复制当前行到粘贴缓冲区
;:" 从剪贴板上过滤非可打印字符
;:" 当从一些 GUI 程序粘贴时会有用处
:nmap <leader>p :let @* = substitute(@*,'[^[:print:]]','','g')<cr>"*p
:set paste                    : prevent vim from formatting pasted in text *N*
;:-----------------------------------------------------------------------------
;:" 重新格式化文本
gq}                                 ;: 合并一个段落
gqap                                ;: 当前段落
ggVGgq                              ;: 全部段落
Vgq                                 ;: 当前行
:s/.\{,69\};\s*\|.\{,69\}\s\+/&\r/g ;:" 在70列的时候换行
;:-----------------------------------------------------------------------------
;:" 命令使用于多个文件
:argdo %s/foo/bar/e                 ;: 在所有文件上操做 :args
:bufdo %s/foo/bar/e
:windo %s/foo/bar/e
:argdo exe '%!sort'|w!              ;: 包含外部命令
:bufdo exe "normal @q" | w   : perform a recording on open files
:silent bufdo !zip proj.zip %:p   : zip all current files
;:-----------------------------------------------------------------------------
;:" 命令行技巧
gvim -h                             ;: 显示帮助
ls | gvim -                         ;: 管道操作
cat xx | gvim - -c "v/^\d\d\|^[3-9]/d "   ;: 从管道出过滤内容
gvim -o file1 file2                 ;: 分割窗口显示两个文件
 gvim -O file1 file2        : open into a vertical split (side by side,for comparing code) [N]
;:" 打开文件后执行一条命令
gvim.exe -c "/main" joe.c           ;: 打开 joe.c & 跳转到 "main"
;:" 在打开一个文件时执行多条命令
vim -c "%s/ABC/DEF/ge | update" file1.c
;:" 在一组文件上执行多条命令
vim -c "argdo %s/ABC/DEF/ge | update" *.c
;:" 从一系列文件中删除一块区域
vim -c "argdo /begin/+1,/end/-1g/^/d| update" *.c
;:" 自动编辑文件 (编辑命令序列Ex commands已经包含在convert.vim中了)
vim -s "convert.vim" file.c
;:#不加载.vimrc跟任何plugin(干净清新的 VIM^_^)
gvim -u NONE -U NONE -N
;:" Access paste buffer contents (put in a script/batch file)
gvim -c 'normal ggdG"*p' c:/aaa/xp
;:" 将paste中的内容送往默认的打印机
gvim -c 's/^/\=@*/|hardcopy!|q!'
;:" gvim 里的 grep (win32 or *nix)
:grep somestring *.php              ;: 创建匹配的文件列表
;:" 使用 :cn(向后后) :cp(向前) 操纵列表
:h grep :查看帮助
" 用 vimgrep 打开文件                              *N*
:vimgrep /keywords/ *.php
:copen
;:-----------------------------------------------------------------------------
;:" GVIM 的差异比较
gvim -d file1 file2                 ;: vimdiff (比较不差异)
dp                                  ;: 把光标处的不同放到另一个文件
do                                  ;: 在光标处从另一个文件取得不同
[c                         : jump backwards to changec
]c                         : jump forwards to change
" complex diff parts of same file [N]
:1,2yank a | 7,8yank b
:tabedit | put a | vnew | put b
:windo diffthis
;:-----------------------------------------------------------------------------
;:" Vim traps 在正则表达式中 + | ( { 都要加上转义符(反斜杠)
In regular expressions you must backslash + (match 1 or more)
In regular expressions you must backslash | (or)
In regular expressions you must backslash ( (group)
In regular expressions you must backslash { (count)
/fred\+/                            ;: 匹配 fred/freddy 但不匹配 free
/\(fred\)\{2,3}/                    ;: note what you have to break
;:-----------------------------------------------------------------------------
;:" \v ,或叫做very magic (通常都是这么叫)可以取消转义符
/codes\(\n\|\s\)*where              ;: 普通的正则表达式
/\vcodes(\n|\s)*where               ;: very magic
;:-----------------------------------------------------------------------------
;:" 把对象送到命令行或者搜索行
<C-R><C-W>                          ;: 执行当前光标下的单个单词
<C-R><C-A>                          ;: 执行当前光标下尽可能多的单词
<C-R>-                              ;: 送至一个小型寄存器(同样使用于插入模式)
<C-R>[0-9a-z]                       ;: 送至一个命名寄存器 (括弧同上)
<C-R>%                              ;: 送至文件名(#也行) (同上)
<C-R>=somevar                       ;: 送至一个变量 (例如 :let sray="ray[0-9]")
;:-----------------------------------------------------------------------------
" List your Registers
:reg                                ;: display contents of all registers
:reg a                              ;: display content of register a
:reg 12a                            ;: display content of registers 1,2 & a *N*
"5p                                 ;: retrieve 5th "ring"
"1p....                             ;: retrieve numeric registers one by one
:let @y='yy@"'                      ;: pre-loading registers (put in .vimrc)
qqq                                 ;: empty register "q"
qaq                                 ;: empty register "a"
:reg .-/%:*"                        ;: the seven special registers *N*
:reg 0                              ;: what you last yanked, not affected by a delete *N*
"_dd                                ;: Delete to blackhole, don't affect any register *N*
;:-----------------------------------------------------------------------------
;:" 控制寄存器
:let @a=@_                          ;: 清除寄存器 a
:let @a=""                          ;: 同上 a
:let @a=@"                          ;: Save unnamed register [N]
:let @*=@a                          ;: 拷贝寄存器 a 到 paste buffer
:let @*=@:                          ;: 拷贝最后执行的命令到 paste buffer
:let @*=@/                          ;: 拷贝最后执行的查找命令到paste buffer
:let @*=@%                          ;: 拷贝当前文件到 paste buffer
;:-----------------------------------------------------------------------------
;:" 帮助的帮助? (使用 TAB)
:h quickref                         ;: VIM 快速参考页
:h tips                             ;: Vim'自己的技巧帮助
:h visual<C-D><tab>                 ;: 虚拟模式的帮助列表
: 然后使用tab选择它们
:h ctrl<C-D>                        ;: 所有关于ctrl键的帮助列表
:helpg uganda                       ;: 过滤帮助文件 使用 :cn, :cp 查找下一个及后一个
:helpgrep edit.*director: grep help using regexp
:h :r                               ;: 关于 :ex 的命令帮助
:h CTRL-R                           ;: 普通模式相关
:h /\r                              ;: \r是什么的意思
:h \\zs                             ;: 使用双反斜线查找关于 \zs 的帮助
:h i_CTRL-R                         ;: 在插入模式中 <C-R>的解释
:h c_CTRL-R                         ;: 在命令模式中 <C-R> 的解释
:h v_CTRL-V                         ;: 虚拟模式
:h tutor                            ;: VIM 快速指南
 <C-]>                              ;: jump to {keyword} under  cursor in help file [C]
<C-[>, <C-T>                        ;: Move back & Forth in HELP History
gvim -h                             ;: VIM 命令行帮助
:cabbrev h tab h                    ;: open help in a tab *N*
;:-----------------------------------------------------------------------------
;:" 选项设置在那里
:scriptnames                        ;: 列出所有已经加载的 plugins, _vimrcs文件
:verbose set history? :显示 history的值并显示在那里定义的
:function                           ;: 列出所有函数
:func SearchCompl                   ;: 显示指定函数的细节
;:-----------------------------------------------------------------------------
;:" 制作你自己的VIM 帮助
:helptags /vim/vim64/doc            ;: 重新编译所有 *.txt 的帮助文件在这个目录里
:help add-local-help :如何添加本地帮助
" save this page as a VIM Help File [N]
:sav! $VIMRUNTIME/doc/vimtips.txt|:1,/^__BEGIN__/d|:/^__END__/,$d|:w!|:helptags $VIMRUNTIME/doc
;:-----------------------------------------------------------------------------
;:" 用外部程序运行文件 (例如 php)
map <f9> :w<CR>:!c:/php/php.exe %<CR>
map <f2> :w<CR>:!perl -c %<CR>
;:-----------------------------------------------------------------------------
;:" 在另一个buffer中,捕捉当前脚本的输出
:new | r!perl #                     ;: 新建一个buffer,从另一个buffer中读入结果
:new! x.out | r!perl #              ;: 同上,并指定一个新文件名
:new+read!ls
;:-----------------------------------------------------------------------------
;:" 创建一个新的buffer, 粘贴q寄存器,然后对它进行排序
:new +put q|%!sort
;:-----------------------------------------------------------------------------
;:" 插入DOS换行符
:%s/$/\<C-V><C-M>&/g                ;: (that's what you type
:%s/$/\<C-Q><C-M>&/g                ;: for Win32) 对于Win32应该这样
:%s/$/\^M&/g                        ;: 你看到的^M是一个字符
;:-----------------------------------------------------------------------------
;:" 自动删除行尾 Dos回车符和空格
autocmd BufRead * silent! %s/[\r \t]\+$//
autocmd BufEnter *.php :%s/[ \t\r]\+$//e
;:-----------------------------------------------------------------------------
;:" 对指定文件或文件类型执行某个动作
autocmd VimEnter c:/intranet/note011.txt normal! ggVGg?
autocmd FileType *.pl exec('set fileformats=unix')
;:-----------------------------------------------------------------------------
;:" 把最后一个命令贴到当前位置
i<c-r>:
;:" 把最后一个搜索指令贴到当前位置
i<c-r>/
;:-----------------------------------------------------------------------------
;:" 更多的完成功能
<C-X><C-F> ;:插入当前目录下的一个文件名到当前位置 # 在insert模式下使用 # 然后用Ctrl-P/Ctrl-N 翻页
;:-----------------------------------------------------------------------------
;:" 替换一个visual区域
;:" 选择一个区域,然后输入 :s/Emacs/Vim/ 等等,vim会自动进入:模式
:'<,'>s/Emacs/Vim/g                 ;: 前面的' '<.'> 是vim自动添加的
gv                                  ;: 重新选择前一个可视区域 (ULTRA)
;:-----------------------------------------------------------------------------
;:" 在文件中插入行号
:g/^/exec "s/^/".strpart(line(".")."", 0, 4)
:%s/^/\=strpart(line(".")." ", 0, 5)
:%s/^/\=line('.'). ' '
;:-----------------------------------------------------------------------------
;:#用VIM的方式来编号行
:set number                         ;: 显示行号
:map <F12> :set number!<CR>         ;: <F12>开关行号显示
:%s/^/\=strpart(line('.')." ",0,&ts)
;:#从任意行开始编号(需要perl)
:'a,'b!perl -pne 'BEGIN{$a=223} substr($_,2,0)=$a++'
;:#产生数字列表
;:#从223行开始的内容至一个空文件
qqmnYP`n^Aq                         ;: 用@q来重复一个宏q
;:" 递增已存在数字到文件末
:.,$g/^\d/exe "normal! \<c-a>"
;:" 高级递增,参见:
http://vim.sourceforge.net/tip_view.php?tip_id=150
;:-----------------------------------------------------------------------------
;:" 高级递增 (真的很有用)
;:" 把下面几句放到 _vimrc
let g:I=0
function! INC(increment)
let g:I =g:I + a:increment
return g:I
endfunction
;:" 例如从mark a 到mark b 递增,从223开始,步长为5
:let I=223
:'a,'bs/^/\=INC(5)/
;:" create a map for INC
cab viminc :let I=223 \| 'a,'bs/$/\=INC(5)/
;:-----------------------------------------------------------------------------
;:" 生成从 23-64 的数字列表
o23<ESC>qqYp<C-A>q40@q
;:-----------------------------------------------------------------------------
;:" 在当前插入模式下编辑/移动 (真得很有用)
<C-U>                               ;: 删除全部
<C-W>                               ;: 删除最后一个单词
<HOME><END>                         ;: 移动到行首/行尾
<C-LEFTARROW><C-RIGHTARROW>         ;: 向前/后移动一个单词
<C-X><C-E>,<C-X><C-Y>               ;: 输入方式时滚屏
;:-----------------------------------------------------------------------------
#加密(小心使用,不要忘了密码)
:X                                  ;: vim会提示你输入密码
:h :X
;:-----------------------------------------------------------------------------
;:" 模式行 (使文件只读等),必须在前/后 5行内
// vim:noai:ts=2:sw=4:readonly:
vim:ft=html:                        ;: 使用 HTML 语法高亮
:h modeline
;:-----------------------------------------------------------------------------
;:" 建立你自己的菜单项
amenu Modeline.Insert\ a\ VIM\ modeline <Esc><Esc>ggOvim:ff=unix ts=4
ss=4<CR>vim60:fdm=marker<esc>gg
;:-----------------------------------------------------------------------------
;:" 一个保存当前光标下的狭义字到一个文件的函数
function! SaveWord()
normal yiw
exe ':!echo '.@0.' >> word.txt'
endfunction
map ,p :call SaveWord()
;:-----------------------------------------------------------------------------
;:" 删除重复行的函数
 function! Del()
  if getline(".") == getline(line(".") - 1)
    norm dd
  endif
 endfunction
:g/^/ call Del()                    ;:#使用该函数的一个例子
;:-----------------------------------------------------------------------------
;:" 双字节编码 (non alpha-numerics)
:digraphs                           ;: 显示编码表
:h dig                              ;: 帮助
i<C-K>e'                            ;: 输入 é
i<C-V>233                           ;: 输入 é (Unix)
i<C-Q>233                           ;: 输入 é (Win32)
ga                                  ;: 查看字符的hex值
;:#删除非 ascii 字符
:%s/[\x00-\x1f\x80-\xff]/ /g      : type this as you see it
:%s/[<C-V>128-<C-V>255]//gi       : where you have to type the Control-V
:%s/[€-]//gi                     : Should see a black square & a dotted y
:%s/[<C-V>128-<C-V>255<C-V>01-<C-V>31]//gi  ;: All pesky non-asciis
:exec "norm /[\x00-\x1f\x80-\xff]/" ;:: 同上
;:#在查找框内输入不可见字符
yl/<C-R>" :
/[^a-zA-Z0-9_[:space:][:punct:]]    ;:: 找出所有不可见字符
;:-----------------------------------------------------------------------------
;:" 文件名自动完成 (例如 main_c.c)
:e main_<tab>                       ;: tab 键完成
gf                                  ;: 打开光标处广义字命名的文件 (normal模式)
main_<C-X><C-F>                     ;: 文件名自动完成(insert模式)
;:-----------------------------------------------------------------------------
;:" Vim复杂使用
;:" 交换两个单词
:%s/\<\(on\|off\)\>/\=strpart("offon", 3 * ("off" == submatch(0)), 3)/g
;:" 交换两个单词
:vnoremap <C-X> <Esc>`.``gvP``P
" Swap word with next word
nmap <silent> gw    "_yiw:s/\(\%#\w\+\)\(\_W\+\)\(\w\+\)/\3\2\1/<cr><c-o><c-l> *N*
;:-----------------------------------------------------------------------------
;:" 把text文件转换成html文件(oh,ft)
:runtime! syntax/2html.vim          ;: 转换 txt 成 html
:h 2html
;:-----------------------------------------------------------------------------
;:" VIM 有一个内部自带的 grep 命令
:grep some_keyword *.c              ;: 得到一个包含some_keyword的c文件名列表
:cn                                 ;: 去下一个出现的位置
;:-----------------------------------------------------------------------------
;:" 强制无扩展名的文件的语法着色方式
:set syntax=perl
;:" 取消语法着色 (很有用)
:set syntax off
;:" 改变色彩主题 (在~vim/vim??/colors中的任何文件)
:colorscheme blue
;:" 通过使用模式行强迫使用 HTML 语法高亮
# vim:ft=html:
;:" 强制自动语法加亮(非标准的文件扩展)
au BufRead,BufNewFile */Content.IE?/* setfiletype html
;:-----------------------------------------------------------------------------
:set noma (non modifiable)          ;: 防止修改
:set ro (Read Only)                 ;: 只读保护
;:-----------------------------------------------------------------------------
;:" 对话 (打开一堆文件)
gvim file1.c file2.c lib/lib.h lib/lib2.h         ;: 在"对话"中加载这些文件
:mksession                          ;: 生成一个Session文件 (默认是Session.vim)
:mksession MySession.vim            ;: Make a Session file named file [C]
:q
gvim -S                             ;: Reload all files (loads Session.vim) [C]
gvim -S Session.vim                 ;: 重新加载所有文件
;:-----------------------------------------------------------------------------
#标记(tags) (跳转到子程序/函数)
taglist.vim                         ;: 很流行的插件
:Tlist                              ;: 显示标记 (函数列表)
<C-]>                               ;: 跳转到光标处的函数
;:-----------------------------------------------------------------------------
;:" columnise a csv file for display only as may crop wide columns
:let width = 20
:let fill=' ' | while strlen(fill) <width | let fill=fill.fill | endwhile
:%s/\([^;]*\);\=/\=strpart(submatch(1).fill, 0, width)/ge
:%s/\s\+$//ge
;:" Highlight a particular csv column (put in .vimrc)
function! CSVH(x)
        execute 'match Keyword /^\([^,]*,\)\{'.a:x.'}\zs[^,]*/'
        execute 'normal ^'.a:x.'f,'
endfunction
command! -nargs=1 Csv :call CSVH(<args>)
;:" call with
:Csv 5                              ;: highlight fifth column
;:-----------------------------------------------------------------------------
;:" 折叠:隐藏某些片断,使查看更容易
zf1G                                ;: fold everything before this line [N]
zf}                                 ;: 使用动作命令折叠一个段落
v}zf                                ;: 使用可视模式折叠一个段落
zf'a                                ;: 折叠到一个标记上
zo                                  ;: 打开折叠
zc                                  ;: 重新关闭折叠
" also visualise a section of code then type zf [N]
:help folding
zfG      : fold everything after this line [N]
;:-----------------------------------------------------------------------------
;:" 显示"不可见字符"
:set list
:h listchars
;:-----------------------------------------------------------------------------
;:" 如何在不进入插入模式的情况下粘贴"普通模式的命令"
:norm qqy$jq
;:-----------------------------------------------------------------------------
;:" 处理文件名
:h filename-modifiers               ;: 帮助
:w %                                ;: 写入当前文件
:w %:r.cfm                          ;: 改变文件扩展名为 .cfm
:!echo %:p                          ;: 显示完整路径和文件名
:!echo %:p:h                        ;: 只显示完整路径
:!echo %:t                          ;: 只显示文件名
:reg %                              ;: 显示文件名
<C-R>%                              ;: 插入文件名 (插入模式)
:"%p                                ;: 插入文件名 (普通模式)
/<C-R>%                             ;: 在文本中查找文件名
;:-----------------------------------------------------------------------------
;:" 删除,但不破坏 buffer 内容
:"_d                                ;: 你一直想要的东西
:"_dw                               ;: 例如:删除一个单词 (使用黑洞???)
;:-----------------------------------------------------------------------------
;:" 送完整的路径名到剪贴板,用于邮件附件等
nnoremap <F2> :let @*=expand("%:p")<cr> :unix
nnoremap <F2> :let @*=substitute(expand("%:p"), "/", "\\", "g")<cr> :win32
;:-----------------------------------------------------------------------------
;:" 不用离开 Vim 就能修改文件名的简单 shell 脚本
$ vim
:r! ls *.c
:%s/\(.*\).c/mv & \1.bla
:w !sh
:q!
;:-----------------------------------------------------------------------------
;:" 在一个文本里计算单词数
g<C-G>
:echo line("'b")-line("'a")            # count lines between markers a and b [N]
:'a,'bs/^//n                           # count lines between markers a and b
:'a,'bs/somestring//gn                 # count occurences of a string
;:-----------------------------------------------------------------------------
;:" 你自己设置高亮显示的例子
:syn match DoubleSpace " "
:hi def DoubleSpace guibg=#e0e0e0
;:-----------------------------------------------------------------------------
;:" reproduce previous line word by word
imap ] @@@<ESC>hhkyWjl?@@@<CR>P/@@@<CR>3s
nmap ] i@@@<ESC>hhkyWjl?@@@<CR>P/@@@<CR>3s
;:" 根据文件类型映射快捷键
:autocmd bufenter *.tex map <F1> :!latex %<CR>
:autocmd bufenter *.tex map <F2> :!xdvi -hush %<.dvi&<CR>
" allow yanking of php variables with their dollar [N]
:autocmd bufenter *.php :set iskeyword+=\$
;:-----------------------------------------------------------------------------
;:" 读取 MS-Word 文档,需要 antiword
:autocmd BufReadPre *.doc set ro
:autocmd BufReadPre *.doc set hlsearch!
:autocmd BufReadPost *.doc %!antiword "%"
;:-----------------------------------------------------------------------------
;:" a folding method
vim: filetype=help foldmethod=markerfoldmarker=<<<,>>>
;:A really big section closed with a tag <<<
;:--- remember folds can be nested ---
Closing tag >>>
;:-----------------------------------------------------------------------------
" 光标在最后一次编辑位置 *N*
autocmd BufReadPost *
     \ if line("'\"") > 0 && line("'\"") <= line("$") |
     \   exe "normal! g`\"" |
     \ endif
;:-----------------------------------------------------------------------------
" store text that is to changed,deleted in register a
"act<
----------------------------------------
"installing/getting latest version of vim on Linux (replace tiny-vim) [N]
yum install vim-common vim-enhanced vim-minimal
----------------------------------------
# using gVIM with Cygwin on a Windows PC
if has('win32')
source $VIMRUNTIME/mswin.vim
behave mswin
set shell=c:\\cygwin\\bin\\bash.exe shellcmdflag=-c shellxquote=\"
endif
----------------------------------------
;:-----------------------------------------------------------------------------
;:" Just Another Vim Hacker JAVH
vim -c ":%s%s*%Cyrnfr)fcbafbe[Oenz(Zbbyranne%|:%s)[[()])-)Ig|norm Vg?"
;:# 译释:呵呵,谁来解释一下吧!
;:# 其实不过是在启动vim的时候执行了一个命令
;:# 先写入了 Just Another Vim Hacker 的rot13编码
;:# 然后再解码
;:-----------------------------------------------------------------------------
;:__END



路过

鸡蛋

鲜花

握手

雷人

发表评论 评论 (3 个评论)

回复 li3 2007-6-4 19:07
这是用vim 作的网页,不用任何html语句.做好文档后,用命令!Tohtml,就生成了上面的网页.

QUOTE:
以下为blog主人的回复:
qihi 2007-10-12 11:46
感谢您收集整理了这么好的Vim资料。
ati3200 2009-4-21 11:11
[emot]11[/emot] nice