免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1085 | 回复: 0
打印 上一主题 下一主题

Vim 技巧翻译 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-09-05 20:25 |只看该作者 |倒序浏览
__开始__
------------------------------------------------------------------------------
" 搜索
/joe/e                      : 设置光标到匹配"joe"的末尾
/joe/e+1                    : 设置光标到匹配"joe"的末尾再后移一位
/joe/s-2                    : 设置光标到匹配"joe“的开头再前移两位
/^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的行
/\/i                 : 搜索独立的单词fred
/\               : 搜索独立的4位数字
/\D\d\d\d\d\D               : 搜索6位字符串中间4位数字前后两位不能为数字
/\                 : 同/\
" 查找空行
/^\n\{3}                    : 匹配三连续的空行
" 使用正则表达式组查找
/\(fred\).*\(joe\).*\2.*\1
" 正则表达式重复
/^\([^,]*,\)\{8}
" visual searching
:vmap // y/"       : visually模式下的键盘映射,把//映射成匹配当前选中的文本
:vmap  //    y/=escape(@", '\\/.*$^~[]') : 包括空白字符
" \zs 和 \ze 匹配原 :h /\zs
/]*\ze>              : 匹配尖括号中的内容
" 零宽度匹配 :h /\@=
/]*>\@=             : search for tag contents, ignoring chevrons
/]*>\@=           : search for tags across possible multiple lines
" 多行查找 \_ 的意思是包括换行符
/                   : 匹配结尾的所有内容
/fred\_s*joe/i                    : 匹配fred开始到joe,之间一定得是空白字符
/bugs\(\_.\)*bunny                : 匹配所有bugs到bunny的字符串
:h \_                             : help
" 查找函数声明,nmap为normal模式下的键盘映射
:nmap gx yiw/^\(sub\function\)\s\+"
" 查找多个文件
:bufdo /searchstr/                : 在多个文件缓冲区里执行查找
" 更好的多文件查找定位方法
:bufdo %s/searchstr/&/gic   : 在多个文件缓冲区里查找,按下n停止
" 怎样不使用 / 来查找网址
?http://www.vim.org/        : 向后查找
" 查找指定字符以外的字符串
/\c\v([^aeiou]&\a){4}       : 查找4个辅音字母
----------------------------------------
#替换
:%s/fred/joe/igc            : 普通替换命令
:%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部分
" IF YOU ONLY WANT TO KNOW ONE THING
:'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/\(.*\):\(.*\)/\2 : \1/   : 将两个字段颠倒
:%s/^\(.*\)\n\1$/\1/        : 删除重复行
" 非贪婪匹配 \{-}
:%s/^.\{-}pdf/new.pdf/      : 删除第一个pdf
" use of optional atom \?
:%s#\#\L&#gc : lowercase with optional leading characters
" 跨越尽量多的行
:%s///        : 删除多行注释
:help /\{-}                 : 查看非贪婪匹配的更多帮助
" 使用寄存器替换
:s/fred/a/g            : 将fred替换为寄存器a里的内容
:s/fred/asome_texts/g  
:s/fred/\=@a/g              : better alternative as register not displayed
" 在一行里写多种命令
:%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(这里|不是管道)
" 调用vim函数
:s/__date__/\=strftime("%c")/ : 将__date__替换成当前日期,使用strftime函数
" 处理列,替换所有在第三列中的str1
:%s:\(\(\w\+\s\+\)\{2}\)str1:\1str2:
" 交换第一列跟第四列
:%s:\(\w\+\)\(.*\s\+\)\(\w\+\)$:\3\2\1:
" 过滤form中的内容放在寄存器里
:redir @*|sil exec 'g##p'|redir END
:nmap
,z :redir @*sil exec
'g@select\textarea\/\=form\)\>@p'redir
END
" 两位以上的数字减三(带进位。这个命令挺有趣)
:%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\)\@z :%s#\=expand("")\>#
" Pull Visually Highlighted text into LHS of a substitute
:vmap z :%s/\*\>/
----------------------------------------
" all following performing similar task, substitute within substitution
" Multiple single character substitution in a portion of line only
:%s,\(all/.*\)\@/                : 显示单一单词fred
:g/^\s*$/d                  : 删除所有空行
:g!/^dd/d                   : 删除不含字符串''dd''的行
:v/^dd/d                    : 同上
:g/fred/,/joe/d             : 删除所有的从fred到joe
:g/-------/.-10,.d          : 以-------为标记删除之前的10行
:g/{/ ,/}/- s/\n\+/\r/g     : 删除 {...}之间的空行
:v/\S/d                     : Delete empty lines (both types)
:v/./,/./-j                 : 压缩空行
:g/^$/,/./-j                : 同上
:g/)
:.,$g/^\d/exe "norm! \": 增加从当前行首到结尾的数字
:'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
:'a,'b g/^Error/ . w >> errors.txt
" 复制每一行,然后在复制出来的每一行两侧加上一个 print '复制出来的内容'
:g/./yank|put|-1s/'/"/g|s/.*/Print '&'/
" 用文件中的内容替换字符串,-d 表示删除“标记”
:g/^MARK$/r tmp.ex | -d
" display prettily
:g//z#.5           : display with context
:g//z#.5|echo "=========="  : display beautifully
" Combining g// with normal mode commands
:g/|/norm 2f|r*                      : replace 2nd | with a star
"send output of previous global command to a new window
:nmap   :redir @a:g//:redir END:new:put! a
----------------------------------------
" 全局命令和替换命令联姻 (强大的编辑能力)
:'a,'bg/fred/s/joe/susan/gic :  可以使用反向引用来匹配
:g/fred/,/joe/s/fred/joe/gic :  non-line based (ultra)
----------------------------------------
" 先找fred,然后找joe
:/fred/;/joe/-2,/sid/+3s/sally/alley/gIC
----------------------------------------
" create a new file for each line of file eg 1.txt,2.txt,3,txt etc
:g/^/exe ".w ".line(".").".txt"
----------------------------------------
" Absolutely essential
----------------------------------------
* # g* g#           : 查找当前光标下的单词(单个单词) () (向前/向后)
%                   : 匹配括号 {}[]()
.                   : 重复上次操作
@:                  : 重复上次的命令
matchit.vim         : 适%能匹配             : 插入模式下自动完成填词
          : 行自动完成(超级有用)
/         : 把单个单词放入搜索或者命令行
/         : 把字符串中有的单词放入搜索或者命令行
:set ignorecase     : 忽略大小写
:syntax on          : 打开语法高亮 Perl,HTML,PHP 等等
:h regexp      : 按ctrl+d得到包含regexp的列表
                                    (按tab自动不齐)
----------------------------------------
" 简单编辑更新 _vimrc文件
:nmap ,s :source $VIM/_vimrc                :普通模式下的键盘映射 ,s映射成加载用户目录下的_vimrc文件
:nmap ,v :e $VIM/_vimrc                          :,v映射成打开_vimrc文件
----------------------------------------
#VISUAL 模式 (方便增加 HTML 标签)
:vmap sb "zdiz  : 在 VISUALLY模式下将选中的文本前后分别加上
:vmap st "zdiz ?>  : 加上
----------------------------------------
" 浏览
:Exp(lore)                      : 浏览文件
:Sex(plore)                     : 分割窗口浏览文件
:ls                             : 显示缓冲区
:cd ..                          : 设置当前目录位置
:args                           : 查看当前打开的所有文件
:lcd %:p:h                      : 改变路径到当前编辑的文件
: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/\/\u\1\L\2/g
" 大写所有句子的第一个字母
:%s/[.!?]\_s\+\a/\U&\E/g
----------------------------------------
gf                              : 打开当前光标下或后的文件
:nnoremap gF :view   : 打开当前光标下或后的文件, 如果不存在则创建
ga                              : 显示当前光标下单个字的ascii,十进制,十六进制……
ggVGg?                          : 将整个文件用rot13编码……(谁看得懂啊~~hoho)
ggg?G                           : 同上 (针对大文件)
:8 | normal VGg?                : 将第八行用rot13编码
:normal 10GVGg?                 : 同上
,                     : 增加,减少当前光标下的数字
                                  win32 用户需要重定义 CNTRL-A
=5*5                       : 插入25 (小型计算器)
----------------------------------------
" 几个彩蛋……
:h 42            : also
http://www.google.com/search?q=42
:h holy-grail
:h!
----------------------------------------
" 标记 & 移动
'.               : 跳回最后编辑的行 (超有用)
`.               : 同上,但是定位编辑点
g;               : 跳转到比较旧的编辑位置(如果有的话) (vim6.3后的新功能)
g,               : 这个是较心的位置 (同上)
:changes             :打出改变表
:h changelist    : 查看“改变表跳转”的帮助
            : 依次沿着你的跳转记录向回跳 (从最近的一次开始)
            : 依次沿着你的跳转记录向前跳
:ju(mps)         : 列出跳转轨迹
:help jump-motions
:history         : 列出历史记录
:his c           : 命令行历史
:his s           : 搜索历史
q/               : 搜索命令历史的窗口
q:               : 命令行命令历史的窗口
:           : 历史窗口
----------------------------------------
" 缩写 & 映射
:map      :'a,'bw! c:/aaa/x
:map      :r c:/aaa/x
:map     :.w! c:/aaa/xr
:map     :r c:/aaa/xr
:ab php          : 查看以php开头的缩写
:map ,           : 列出所有的映射(以逗号开始的)
" 允许映射 F10  (win32)
set wak=no       : :h winaltkeys
" 映射中常使用的表示
             : 回车
            : Esc
         : 右斜杠
            : 管道符号
      : 退格键
         : 不回显
#显示自定义的 RGB 颜色显示当前光标下的字符串 例如 #445588
:nmap c :hi Normal guibg=#=expand("")
map  /price only\\|versus/ :in a map need to backslash the \
----------------------------------------
" Simple PHP debugging display all variables yanked into register a
" 简单的 PHP 调试将所有显示的变量放入寄存器a
iab phpdb exit("Debug 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@.              : 只执行键入的命令
----------------------------------------
" 从其它命令处获得输入(需要外部命令)
:r!ls.exe        : 从ls 获得输入插入到当前位置
!!date           : 从date获得输入(删除当前行)
" 使用外部sort排序
:%!sort -u       : 用sort排序整个文件(结果覆盖整个文件)
:'a,'b!sort -u   : 从mark a到mark b之间的内容进行排序
!1} sort -u      : 排序一个段落
:g/^$/;,/^$/-1!sort : Sort each block (note the crucial ;)
----------------------------------------
" 多文件管理 (基本的)
: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! % :ls:e # : 按F5显示所有buffer, 并显示行号
:set hidden      : 允许不保存当前buffer而进行切换
----------------------------------------
" 在分割窗口中快速切换
map  j_
map  k_
----------------------------------------
" 录制命令 (最好的技巧)
qq  # 录制命令放入 q寄存器
输入一些命令
q   # 录制结束
@q   :执行放入寄存器q中的内容
@@    :重复
5@@    :重复5次
" 编辑一个 寄存器/录制
"qp                               :显示寄存器q中的内容(普通模式下)
q                         :显示寄存器q中的内容 (插入模式下)
" 你现在可以看到记录内容,随便编辑
"qdd                              :删除,重新存入q
@q                                :执行 录制/寄存器 q
" 在可视块中运行记录
1) 定义记录/寄存器
qq:s/ to/ from/g^Mq
2) 定义可视块
V}
3) 键入 : 将显示下面信息
:'
4)完成如下操作
:'norm @q
----------------------------------------
"combining a recording with a map (to end up in command mode)
nnoremap ] @q:w!bd
----------------------------------------
" 可视化模式提供一种灵活易用的方法选择一块文本供操作符使用
" 记出
v                               : 进入可视化模式
V                               : 进入可视化行选择模式
                           : 进入可视化块选择模式
gv                              : 重新选择
o                               : 选择的区域头尾移动
"*y                             : 复制选择区域到paste buffer
V%                              : 选择一个匹配段
V}J                             : 合并一个段落
V}gJ                            : 合并一个段落,并保留空格
----------------------------------------
" 删除选中的10行的前两个字符(不过这里应该假设是紧凑的排版格式,不能包含空格、tab等字符的,可是经实验应该是钱3个字符才对啊??)
010j2ld
----------------------------------------
" 如何用可视块拷贝几列
" 可视块(并非通常的 v 命令)
,然后通过移动命令选择列 (win32 )
然后执行 c,d,y,r 等命令
----------------------------------------
" how to overwrite a visual-block of text with another such block
Pick the first block: ctrl-v move "ay
Pick the second block: ctrl-v move c ctrl-o "aP
----------------------------------------
" _vimrc 基本设置
: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:silent !start c:\progra~1\intern~1\iexplore.exe file://%:p
:nmap ,i :update: !start c:\progra~1\intern~1\iexplore.exe
----------------------------------------
" 在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     :向内缩进,原理同上
" 块缩进
>i{
>a{
" also
>% and > out.txt            : 重定向到文件
" 操作粘贴缓冲区
"*yy                         : 复制到寄存器
"*p                          : 从寄存器中粘贴一行
" 复制到粘贴缓冲区 (扩展模式)
:'a,'by*                     : 复制一个范围到粘贴寄存器
:%y*                         : 复制一个括号匹配到粘贴缓冲区
:.y*                         : 复制当前行到粘贴缓冲区
" 从剪贴板上过滤非可打印字符
" 当从一些 GUI 程序粘贴时会有用处
:nmap p :let @* = substitute(@*,'[^[:print:]]','','g')"*p
----------------------------------------
" 重新格式化文本
gq}                          : 合并一个段落
gqap                         : 当前段落
ggVGgq                       : 全部段落
Vgq                          : 当前行
" 在70列的时候换行
:s/.\{,69\};\s*\|.\{,69\}\s\+/&\r/g
----------------------------------------
" 命令使用于多个文件
:argdo %s/foo/bar/e          : 在所有文件上操做 :args
:bufdo %s/foo/bar/e
:windo %s/foo/bar/e
:argdo exe '%!sort'|w!       : 包含外部命令
----------------------------------------
" 命令行技巧
gvim -h                    : 显示帮助
ls | gvim -                : 管道操作
cat xx | gvim - -c "v/^\d\d\|^[3-9]/d " : 从管道出过滤内容
gvim -o file1 file2        : 分割窗口显示两个文件
" 打开文件后执行一条命令
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 :查看帮助
----------------------------------------
" GVIM 的差异比较
gvim -d file1 file2        : vimdiff (比较不差异)
dp                         : 把光标处的不同放到另一个文件
do                         : 在光标处从另一个文件取得不同
----------------------------------------
" Vim traps
在正则表达式中 + | ( { 都要加上转义符(反斜杠)
/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
----------------------------------------
" 把对象送到命令行或者搜索行
: 执行当前光标下的单个单词
: 执行当前光标下尽可能多的单词
-                  : 送至一个小型寄存器(同样使用于插入模式)
[0-9a-z]           : 送至一个命名寄存器 (括弧同上)
%                  :  送至文件名(#也行) (同上)
=somevar           : 送至一个变量 (例如 :let sray="ray[0-9]")
----------------------------------------
" 控制寄存器
:let @a=@_              : 清除寄存器 a
:let @a=""              : 同上 a
:let @*=@a              : 拷贝寄存器 a 到 paste buffer
:let @*=@:              : 拷贝最后执行的命令到 paste buffer
:let @*=@/              : 拷贝最后执行的查找命令到paste buffer
:let @*=@%              : 拷贝当前文件到 paste buffer
map    "qyy:let @q=@q."zzz"
----------------------------------------
" 帮助的帮助? (使用 TAB)
:h quickref             : VIM 快速参考页
:h tips                 : Vim'自己的技巧帮助
:h visual     : 虚拟模式的帮助列表
                        : 然后使用tab选择它们
:h ctrl            : 所有关于ctrl键的帮助列表
:helpg uganda           : 过滤帮助文件 使用 :cn, :cp 查找下一个及后一个
:h :r                   : 关于 :ex 的命令帮助
:h CTRL-R               : 普通模式相关
:h /\r                  :  \r是什么的意思
:h \\zs                 : 使用双反斜线查找关于 \zs 的帮助
:h i_CTRL-R             : 在插入模式中 的解释
:h c_CTRL-R             : 在命令模式中  的解释
:h v_CTRL-V             : 虚拟模式
:h tutor                : VIM 快速指南
,             : Move back & Forth in HELP History
gvim -h                 : VIM 命令行帮助
----------------------------------------
" 选项设置在那里
:scriptnames            : 列出所有已经加载的 plugins, _vimrcs文件
:verbose set history?   :显示 history的值并显示在那里定义的
:function               : 列出所有函数
:func SearchCompl       : 显示指定函数的细节
----------------------------------------
" 制作你自己的VIM 帮助
:helptags /vim/vim64/doc  : 重新编译所有 *.txt 的帮助文件在这个目录里
:help add-local-help    :如何添加本地帮助
----------------------------------------
" 用外部程序运行文件 (例如 php)
map      :w:!c:/php/php.exe %
map      :w:!perl -c %
----------------------------------------
" 在另一个buffer中,捕捉当前脚本的输出
:new | r!perl #                   : 新建一个buffer,从另一个buffer中读入结果
:new! x.out | r!perl #            : 同上,并指定一个新文件名
:new+read!ls
----------------------------------------
" create a new buffer, paste a register "q" into it, then sort new buffer
:new +put q|%!sort
----------------------------------------
" 插入DOS换行符
:%s/$/\&/g          :  (that's what you type
:%s/$/\&/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:
" 把最后一个搜索指令贴到当前位置
i/
----------------------------------------
" 更多的完成功能
                        :插入当前目录下的一个文件名到当前位置
# 在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  :set number!       : Show linenumbers flip-flop
:%s/^/\=strpart(line('.')."        ",0,&ts)
#从任意行开始编号(需要perl)
:'a,'b!perl -pne 'BEGIN{$a=223} substr($_,2,0)=$a++'
#产生数字列表
#Type in number on line say 223 in an empty file
qqmnYP`n^Aq                       : in recording q repeat with @q
" 递增已存在数字到文件末
:.,$g/^\d/exe "normal! \"
" 高级递增,参见:
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 的数字列表
o23qqYpq40@q
----------------------------------------
" 在当前插入模式下编辑/移动 (真得很有用)
                             : 删除全部
                             : 删除最后一个单词
                       : 移动到行首/行尾
       : 向前/后移动一个单词
,             : scroll while staying put in insert
----------------------------------------
#加密(小心使用,不要忘了密码)
:X                                : vim会提示你输入密码
:h :X
----------------------------------------
" 模式行 (使文件只读等),必须在前/后 5行内
// vim:noai:ts=2:sw=4:readonly:
" vim:ft=html:                    : 使用 HTML 语法高亮
:h modeline
----------------------------------------
" 建立你自己的菜单项
amenu  Modeline.Insert\ a\ VIM\ modeline ggOvim:ff=unix ts=4 ss=4vim60:fdm=markergg
----------------------------------------
" 一个保存当前光标下的狭义字到一个文件的函数
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                            : 帮助
ie'                          : 输入 é
i233                         : 输入 é (Unix)
i233                         : 输入 é (Win32)
ga                                : 查看字符的hex值
#删除非 ascii 字符
:%s/[128-255]//gi       : where you have to type the Control-V
:%s/[€-ÿ]//gi                     : Should see a black square & a dotted y
:%s/[128-25501-31]//gi : All pesky non-asciis
:exec "norm /[\x00-\x1f\x80-\xff]/"        : same thing
#Pull a non-ascii character onto search bar
yl/"                         :
/[^a-zA-Z0-9_[:space:][:punct:]]  : search for all non-ascii
----------------------------------------
" 文件名自动完成 (例如 main_c.c)
:e main_                     : tab 键完成
gf                                : 打开光标处广义字命名的文件 (normal模式)
main_                   : 文件名自动完成(insert模式)
----------------------------------------
" Vim复杂使用
" 交换两个单词
:%s/\/\=strpart("offon", 3 * ("off" == submatch(0)), 3)/g
" 交换两个单词
:vnoremap  `.``gvP``P
----------------------------------------
" 把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)
:q
gvim -S Session.vim               : 重新加载所有文件
----------------------------------------
#标记(tags) (跳转到子程序/函数)
taglist.vim                       : 很流行的插件
:Tlist                            : 显示标记 (函数列表)
                             : 跳转到光标处的函数
----------------------------------------
" columnise a csv file for display only as may crop wide columns
:let width = 20
:let fill=' ' | while strlen(fill) )
" call with
:Csv 5                             : highlight fifth column
----------------------------------------
" 折叠:隐藏某些片断,使查看更容易
zf}                               : 使用动作命令折叠一个段落
v}zf                              : 使用可视模式折叠一个段落
zf'a                              : 折叠到一个标记上
zo                                : 打开折叠
zc                                : 重新关闭折叠
----------------------------------------
" 显示"不可见字符"
:set list
:h listchars
----------------------------------------
" 如何在不进入插入模式的情况下粘贴"普通模式的命令"
:norm qqy$jq
----------------------------------------
" 处理文件名
:h filename-modifiers             : 帮助
:w %                              : 写入当前文件
:w %:r.cfm                        : 改变文件扩展名为 .cfm
:!echo %:p                        : 显示完整路径和文件名
:!echo %:p:h                      : 只显示完整路径
:!echo %:t                        : 只显示文件名
:reg %                            : 显示文件名
%                            : 插入文件名 (插入模式)
"%p                               : 插入文件名 (普通模式)
/%                           : 在文本中查找文件名
----------------------------------------
" 删除,但不破坏 buffer 内容
"_d                               : 你一直想要的东西
"_dw                              : 例如:删除一个单词 (使用黑洞???)
----------------------------------------
" 送完整的路径名到剪贴板,用于邮件附件等
nnoremap  :let @*=expand("%:p") :unix
nnoremap  :let @*=substitute(expand("%:p"), "/", "\\", "g") :win32
----------------------------------------
" 不用离开 Vim 就能修改文件名的简单 shell 脚本
$ vim
:r! ls *.c
:%s/\(.*\).c/mv & \1.bla
:w !sh
:q!
----------------------------------------
" 在一个文本里计算单词数
g
----------------------------------------
" 你自己设置高亮显示的例子
:syn match DoubleSpace "  "
:hi def DoubleSpace guibg=#e0e0e0
----------------------------------------
" reproduce previous line word by word
imap ]  @@@hhkyWjl?@@@P/@@@3s
nmap ] i@@@hhkyWjl?@@@P/@@@3s
" 根据文件类型映射快捷键
:autocmd bufenter *.tex map  :!latex %
:autocmd bufenter *.tex map  :!xdvi -hush %
----------------------------------------
" 读取 MS-Word 文档,需要 antiword
:autocmd BufReadPre *.doc set ro
:autocmd BufReadPre *.doc set hlsearch!
:autocmd BufReadPost *.doc %!antiword "%"
----------------------------------------
" a folding method
vim: filetype=help foldmethod=marker foldmarker=>>
A really big section closed with a tag >>
----------------------------------------
" Just Another Vim Hacker JAVH
vim -c ":%s%s*%Cyrnfr)fcbafbe[Oenz(Zbbyranne%|:%s)[[()])-)Ig|norm Vg?"
# 译释:呵呵,谁来解释一下吧!
# 其实不过是在启动vim的时候执行了一个命令
# 先写入了 Just Another Vim Hacker 的rot13编码
# 然后再解码
----------------------------------------
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/7926/showart_165489.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP