Skip navigation.

极湖

无不用其“极”

Posts tagged with "Editor"

把 Windows 的 Notepad 换成 Notepad2

,

Notepad2 很小巧,然而功能强大,和 Windows 自带的 Notepad 相比,说有天壤之别也不为过。

网上有不少文章介绍如何把 Windows 的 Notepad 换成 Notepad2,步骤都比较复杂,而且成功率不高,尤其是 XP SP2 以后的版本。

经我验证,这个网页上介绍的方法比较好使。方法是在 Notepad2 的文件夹内做一个批处理文件,然后执行。原文介绍的批处理如下(注释已译):
@echo 替换 NOTEPAD.EXE 为 notepad2.EXE ...
REM
REM 1. 阻止系统自动恢复文件
attrib -r -h -s %systemroot%\system32\dllcache
del %systemroot%\system32\dllcache\notepad.bak.exe
ren %systemroot%\system32\dllcache\notepad.exe notepad.bak.exe
attrib +r +h +s %systemroot%\system32\dllcache
attrib -r -h -s %systemroot%\ServicePackFiles\i386
del %systemroot%\ServicePackFiles\i386\notepad.bak.exe
ren %systemroot%\ServicePackFiles\i386\notepad.exe notepad.bak.exe
attrib +r +h +s %systemroot%\ServicePackFiles\i386 

REM
REM 2. 备份 Windows 和 System32中 的 Notepad
del %systemroot%\system32\notepad.bak.exe
copy %systemroot%\system32\notepad.exe %systemroot%\system32\notepad.bak.exe
copy %systemroot%\notepad.exe %systemroot%\notepad.bak.exe
REM
REM 3. 拷贝 notepad2 并覆盖 Windows 和 System32中 的 Notepad
del %systemroot%\notepad.exe
copy notepad2.exe %systemroot%\notepad.exe
copy notepad2.exe %systemroot%\system32\notepad.exe
REM
@echo 替换完成。
@echo
@echo 注: 如果 Windows 文件保护的对话框弹出,请按“取消”。

Windows 版 gVim 之最佳UTF-8解决方案

,

在 Windows 下安装了 gVim 的官方发行版,按照网上一些方法修改 _vimrc 文件,倒腾来倒腾去,编辑utf-8或其他多字节编码文件的时候,总是有这样那样的问题。

于是找到了这个 vim UTF-8日本語版,作者提供单独的配置文件和完整的Vim压缩包,压缩包下载解压后就能使用,无须安装。经我测试,一打开utf-8文件就正常显示,打开其他编码(Shift-JIS, EUC)的文件,也不用任何其他辅助命令,就能正常显示日文。尝试打开GB2312中文编码的文件,显示乱码,没办法,这是日本人做的,不考虑中文编码的对应也是情理之中。不过,日文中文的处理方法是相通的,编码不同而已,因此我想只要修改一下配置文件,就能解决编辑中文编码(GB2312,GBK等)文件的问题。

下载链接

配置文件(包括dll)压缩包
vim72-cfg.zip

解压后即可使用的压缩包
vim72-aio.zip

提示:解压后把根目录下的 _sample_vimrc 和 _sample_gvimrc 拷贝到当前用户根目录下,并改名为 _vimrc 和 _gvimrc。

几个贴心的 Vim 命令和插件

,

命令
* 向前查找当前光标处的单词
# 向后查找当前光标处的单词
% 查找匹配的括号 {} [] ()
<C-p> 自动补齐(向前查找)
<C-n> 自动补齐(向后查找)
:Ex 文件和目录浏览
gf 打开光标处的文件

插件
matchit.vim
能用 % 查找HTML、PHP中匹配的tags,例如在<tr>输入命令 % 即可查找与之匹配的</tr>。

snipMate
很多人羡慕 OS X 下面的 TextMate,有了这个插件,基本上不用再羡慕了。

The NERD tree
给 Vim 加一个漂亮的树形文件浏览器。

LookupFile
快速查找和打开文件,需要最新版的 genutils 。

最后补上我比较喜欢的配色方案:
molokai

以上信息整理加工自 LinuxSir.org 的这个帖子。

CodeMirror:浏览器内的高亮文本编辑器

, ,

因为要做编辑器,所以找了很多 OpenSource 的 WYSIWYG 编辑器代码,当然都是 JavaScript。无意间发现一个好东西——CodeMirror,看了这个东西,我吃惊不少,因为它几乎已经达到了桌面程序的水平,写程序代码能够高亮彩显(目前支持 HTML 和 Javascript),还有自动缩进、括号匹配提示等功能,而且比较流畅。

看了一下 CodeMirror 的代码,觉得很不一般,称得上短小精悍,一看就知道作者的 JavaScript 功底相当深厚,称得上是大师级的水平。作者在他网站上还发布了一本 JavaScript 的教程——Eloquent JavaScript,我看也是个难得的东西,初学者或者是有经验的开发人员都可以参考。

用 JavaScript 写的类似编辑器还有


以上列表也是 CodeMirror 的作者介绍的,看看这些东西,也许您会和我一样惊叹:JavaScript 实在是神奇!

从 UE 到 EmEditor

, ,

首先,这儿的“UE”指的是 UltraEdit

以前我一直用UE编辑代码,至少有5年吧,最近两年却不怎么用UE了,原因就是用了 EmEditor,顺手之后就不忍放弃了。

UE的列模式确实很好用,十六进制的编辑功能确实很“Ultra”。

先说说EmEditor的优点:

多语言多内码支持;(这一点UE没法比)
非常强悍的正则查找替换功能;(正则表达式很标准,查找结果全部着色,一目了然)
非常强悍的宏功能;(默认是JavaScript,几乎无所不能)
很好的插件体系;(因此可以无限扩展,这和Vim和Emacs的路线一致)
非常方便的文件比较功能;(这个UE做得也不错)
多文件操作,包括查找替换等;(这个功能UE也不错,可以说各有千秋)
界面的定制功能不弱,基本能够满足个性化的需求;
... ...

接下来说说EmEditor不足的地方:

作为插件的目录文件树(TreeView)反应迟钝,增删文件和目录不能立即反映,按F5可更新整个树,这个更新过程其实做了很多无用功;
列模式或者方块模式的编辑不如UE;
多文件查找的结果,以新文件中的链接的方式实现,不是很方便,每点开一个文件,都要切换一次文档;(这一点UE做得很好,放在下面的列表里面)
... ...

对EmEditor的一点期待:

实现TextMate那样的代码块"智能编辑"

VIM常用代码编辑命令

, ,

■折叠
zf} 使用动作命令折叠一个段落
zfi{ 折叠{}内部代码( 或 zfi} )
zfa{ 折叠{}整块代码( 或 zfa} )
v}zf 使用可视模式折叠一个段落
zf'a 折叠到一个标记上( 先在某一行执行 ma )
zo 打开折叠
zc 关闭折叠

■块缩进
>i{ {}内部向右缩进
<i{ {}内部向左缩进
>a{ {}整块向右缩进
<a{ {}整块向左缩进

■显示/隐藏行号
:set nu
:set nonu

■插入行号
:g/^/exec "s/^/".strpart(line(".")." ", 0, 4)

■插入字符串
:%s/^/mv /g 在每一行的头部插入“mv ”

■大小写转换
guu 整行小写
gUU 整行大写

Vim 使用技巧集锦

, , , ...

▼搜索
/joe/e : 设置光标到匹配"joe"的末尾
/joe/e+1 : 设置光标到匹配"joe"的末尾再后移一位
/joe/s-2 : 设置光标到匹配"joe“的开头再前移两位
/joe/-2 : 设置光标到匹配"joe“的行再向上移两行的开头
/^joe.*fred.*bill/ : 匹配以“joe”开头且"joe"到"fred"到"bill"之间没有字符或者有字符
/^[A-J]\+/ : 搜索以'A'到’J‘间的一个或者多个字母组合的开头
/begin\_.*end : 多行匹配,begin和end可以不在同一行,因为\_.包括\n
/fred\_s*joe/i : 可以是任何空白字符包括空格,\t,\n等等
/fred\|joe : 搜索fred或者joe
/.*fred\&.*joe : 搜索同时包括fred跟joe的行。注意,\&表示“且”,所以行中不一定要求fred在joe前
/\<fred\>/i : 搜索独立的单词fred
/\<\d\d\d\d\> : 搜索独立的4位数字
/\D\d\d\d\d\D : 搜索6位字符串,中间4位数字,首尾两位不能为数字
/\<\d\{4}\> : 同/\<\d\d\d\d\>

▼查找空行
/^\n\{3} : 匹配3个连续的空行

▼使用正则表达式组查找
/\(fred\).*\(joe\).*\2.*\1

▼正则表达式重复
/^\([^,]*,\)\{8}

▼visual searching
:vmap // y/<C-R>"<CR> : 可视模式下的键盘映射。把//映射成“查找当前选中的文本”,y表示将当前选中内容拷贝到"寄存器中,然后/开始查找,查找内容是后面的输入,<C-R>表示ctrl-r,<CR>是回车
:vmap <silent> // y/<C-R>=escape(@", '\\/.*$^~[]')<CR><CR> : 包括空白字符,加上<silent>,是为了在屏幕最下面的命令行不显示该命令。

▼\zs 和 \ze 匹配原 :h /\zs
/<\zs[^>]*\ze> : 匹配尖括号中的内容

▼零宽度匹配 :h /\@=
/<\@<=[^>]*>\@= : 匹配<>标签中的内容,而忽略<和>本身
/<\@<=\_[^>]*>\@= : 和上例相比,差别在于允许跨行

▼多行查找 \_ 的意思是包括换行符
/ : 匹配结尾的所有内容
/fred\_s*joe/i : 匹配fred开始到joe,之间没有任何字符或者是有空白字符
/bugs\(\_.\)*bunny : 匹配所有bugs到bunny的字符串
:h \_ : help

▼查找函数声明,nmap为normal模式下的键盘映射
:nmap gx yiw/^\(sub\<bar>function\)\s\+<C-R>"<CR> : yiw表示将当前所在单词拷贝到寄存器"中,<bar>表示|,即sub或者function

▼查找多个文件
:bufdo /searchstr/ : 在多个文件缓冲区里执行查找

▼更好的多文件查找定位方法
:bufdo %s/searchstr/&/gic : 在多个文件缓冲区里查找,按下n停止

▼怎样不使用 / 来查找网址
?http://www.vim.org/ : 向上查找

▼查找指定字符以外的字符串
/\c\v([^aeiou]&\a){4} : 查找4个辅音字母,\c表示忽略大小写,\v表示后面所有ascii字符,除了0-9,a-z,A-Z以及_,均有特殊含义,就是所谓非常magic,而 \V表示后面的内容中只有反斜杠\含有特殊含义,就是所谓的非常不magic,(和)中间的内容,表示首先不能是aeiou,但是必须是\a(字母)。

----------------------------------------
▼替换
:%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部分

▼如果你只想学一招,那么就是这个了
:'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的名字换为new.pdf

▼使用可选原子 \?
:%s#\<[zy]\?tbl_[a-z_]\+\>#\L&#gc : 匹配tbl前面没有字母,或者z和y中的某一个字母,然后将所有的字母变为小写

▼跨越尽量多的行
:%s/// : 删除多行注释
:help /\{-} : 查看非贪婪匹配的更多帮助

▼使用寄存器替换
:s/fred/<c-r>a/g : 将fred替换为寄存器a里的内容,<c-r>为按下Ctrl与r,然后输入a后,寄存器a的内容会出现在命令行
: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/ : 将所有带有.gif的行,前后均加入一个空行;将不带有.gif字样的行全部删除;将所有行中的gif换成jpg;注意三条语句,一旦某一条失败,则不执行下面的语句
:%s/a/but/gie|:update|:next : 首先,将当前文件中的所有a变为but;然后保存文件;最后进入下一个文件缓存区。如果有多个文件需要如此处理,可以考虑使用 @:来重复,@:的意义是:执行上一次的命令行命令n次。

▼或运算
:%s/suck\|buck/loopy/gc : 替换suck或者buck为loopy(这里|不是管道)

▼调用vim函数
:s/__date__/\=strftime("%c")/ : 将__date__替换成当前日期,使用strftime函数。注意\=表示后面是表达式,结果可能是2008-1-3 17:59:46

▼处理字段,替换所有在第三个字段中的str1为str2
:%s:\(\(\w\+\s\+\)\{2}\)str1:\1str2:

▼交换第一列跟第四列
:%s:\(\w\+\)\(.*\s\+\)\(\w\+\)$:\3\2\1:

▼过滤form中的内容放在寄存器里
:redir @*|sil exec 'g#<\(input\|select\|textarea\|/\=form\)\>#p'|redir END : redir是将执行的结果重定向到后面的*寄存器中,sil是silent
:nmap ,z :redir @*<Bar>sil exec 'g@<\(input\<Bar>select\<Bar>textarea\<Bar>/\=form\)\>@p'<Bar>redir END<CR> : 普通模式下,敲入,z,命令行执行redir @*|sil exec 'g@<\(input\|select\|textarea\|/\=form\)\>@p'|redir END

▼一位以上的数字减3(带进位,这个命令挺有趣)
:%s/\d\+/\=(submatch(0)-3)/

▼包含loc或者functions的行中的数字加6
:g/loc\|function/s/\d/\=submatch(0)+6/

▼比上面更好的方法
:%s#txtdev\zs\d#\=submatch(0)+1#g : \zs表示是s要匹配的的内容的开头
: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/ : \zs表示是s要匹配的的内容的开头

▼将光标下的单词,放入替换语句的LHS中
:nmap <leader>z :%s#\<<c-r>=expand("<cword>")<cr>\># : <leader>在没有定义mapleader时为\,定义后为mapleader的值。LHS指的是s替换后面,被替换的内容(在左手边)。普通模式下,如果光标下为abc,则输入\z两个字符,结果命令行出现:%s#\<abc\>#,然后你就可以接着输入替换后的内容了。

▼将可视模式下的高亮文本,放入替换语句的LHS中
:vmap <leader>z :<C-U>%s/\<<c-r>*\>/

----------------------------------------
▼以下功能相同,在替换语句内部进行替换
▼每行的一部分中,只执行多个单字符的替换
:%s,\(all/.*\)\@<=/,_,g : 用_替换all后的所有/,all/中的/不变

▼功能同上
:s#all/\zs.*#\=substitute(submatch(0), '/', '_', 'g')#

▼通过将一行分开,然后重新组合,达到替换的效果
:s#all/#&^M#|s#/#_#g|-j! : 在windows下使用了mswin的模式,所以^M得输入为\r,呵呵

▼在替换命令中使用替换
:%s/.*/\='cp '.submatch(0).' all/'.substitute(submatch(0),'/','_','g')/ : 不work,因为all/后面的/和s所有的/有重复。所以我改为 :%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/-------/.-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)
:'a,'bg/^/m'b : 颠倒选中的 a 到 b
:g/^/t. : 重复行
:g/fred/t$ : 拷贝行从fred到结尾
:g/stage/t'a : 拷贝行从stage 到 marker a(a为标记的位置)
:g/\(^I[^^I]*\)\{80}/d : 删除最少包含80个tab的行,注意:^I的输入方法是ctrl-v, ctrl-i

▼隔行替换
:g/^/ if line('.')%2|s/^/zz /

▼查找标记a与b间所有包含"somestr"的行,并全部复制到第一个包含"otherstr"的行后
:'a,'bg/somestr/co/otherstr/ : co(py) or mo(ve)

▼与上面相同,但是多做了一次替换
:'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.
▼将结果存储到寄存器a或者复制缓存区中
:g/fred/y A : 添加带有fred的行到寄存器到a
:g/fred/y A | :let @*=@a : 除了同上外,还将寄存器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

▼优雅地显示
:g/<pattern>/z#.5 : 带有上下文一并显示
:g/<pattern>/z#.5|echo "==========" : 优雅地显示

▼将g//和普通模式下的命令结合起来
:g/|/norm 2f|r* : 将第二个|替换为*号

▼将前面g命令的输出,发送到新窗口中
: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 : 非行模式

----------------------------------------
▼先找fred,然后找joe
:/fred/;/joe/-2,/sid/+3s/sally/alley/gIC : 最后这一个C,手册中都没有,估计是c

----------------------------------------
▼为每一行生成一个文件,文件名从1.txt开始,依次为1.txt,2.txt,3,txt等等
:g/^/exe ".w ".line(".").".txt"

----------------------------------------
▼绝对精华

----------------------------------------
* # 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 : 忽略大小写
:syntax on : 打开语法高亮 Perl,HTML,PHP 等等
:h regexp<C-D> : 按ctrl+d得到包含regexp的列表
(按tab自动补齐)

----------------------------------------
▼简单编辑更新 _vimrc文件
:nmap ,s :source $VIM/_vimrc : 普通模式下的键盘映射 ,s映射成加载用户目录下的_vimrc文件
:nmap ,v :e $VIM/_vimrc : ,v映射成打开_vimrc文件

----------------------------------------
# 可视模式 (方便增加 HTML 标签)
:vmap sb "zdi<C-R>z<ESC> : 在可视模式下将选中的文本前后分别加上某些东西。"z表示寄存器z,d是删除,然后i表示插入,<C-R>指ctrl-r,然后加z,表示粘贴寄存器z的内容,最后escape键。注意:本例将删除的内容帖了回去,所以结果是什么变化都没有。
:vmap st "zdi<?= <C-R>z ?><ESC> : 在前后加上<?=和?>。

----------------------------------------
▼浏览
: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 : 转换词大写,v表示进入可视模式,E表示覆盖到词的末尾,U表示大写。
vE~ : 反向转换词
ggguG : 将当前编辑文件内容全部转换成小写

▼可视模式下选择所有的字母及数字 (放入 .vimrc文件中)
vmap ,c :s/\<\(.\)\(\k*\)\>/\u\1\L\2/g<CR>

▼大写所有句子的第一个字母
:%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> : 增加,减少当前光标下的数字,window用户缺省是将C-A映射成选中全文,所以需要重定义 CNTRL-A
<C-R>=5*5 : 插入25 (小型计算器)

----------------------------------------
▼几个彩蛋,有意思
:h 42 : (还有 http://www.google.com/search?q=42)
:h holy-grail
:h!

----------------------------------------
▼标记 & 移动
'. : 跳回最后编辑的行 (超有用)
`. : 同上,但是定位编辑点
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/ :in a map need to backslash the \

----------------------------------------
▼简单的 PHP 调试将所有显示的变量放入寄存器a
iab phpdb exit("
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@. : 只执行键入的命令

----------------------------------------
▼从其它命令处获得输入(需要外部命令)
:r!ls.exe : 从ls 获得输入插入到当前位置
!!date : 从date获得输入(删除当前行)

▼使用外部sort排序
:%!sort -u : 用sort排序整个文件(结果覆盖整个文件)
:'a,'b!sort -u : 从mark a到mark b之间的内容进行排序
!1} sort -u : 排序一个段落
:g/^$/;,/^$/-1!sort : 将每个块排序(注意这个关键的;)

----------------------------------------
▼多文件管理 (基本的)
: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 : 重命名当前文件
:e! : 打开未修改之前的文件
:w c:/aaa/% : 存储文件到指定位置
:e # : 编辑标记为#的文件在buffer中
:rew : 返回到第一个可编辑的文件
:brew : 回到第一个buffer
:sp fred.txt : 分割窗口打开fred.txt
:sball,:sb : 把所有的 buffers分割显示在一个窗口中 (超有用)
:scrollbind : 让每个分离的窗口,同步滚动
: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次

▼编辑一个 寄存器/录制
"qp : 显示寄存器q中的内容(普通模式下)
<ctrl-R>q : 显示寄存器q中的内容 (插入模式下)

▼你现在可以看到记录内容,随便编辑
"qdd : 删除,重新存入q
@q : 执行 录制/寄存器 q

▼在可视块中运行记录
1) 定义记录/寄存器
qq:s/ to/ from/g^Mq
2) 定义可视块
V}
3) 键入:将显示下面信息
:'<,'>
4)完成如下操作
:'<,'>norm @q

----------------------------------------
▼将一个录制和一个映射绑定 (在命令模式中结束)
nnoremap ] @q:w!<bar>bd

----------------------------------------
▼可视化模式提供一种灵活易用的方法选择一块文本供操作符使用
▼可视化模式基础
v : 进入可视化模式
V : 进入可视化行选择模式
<C-V> : 进入可视化块选择模式
gv : 重新选择
o : 选择的区域头尾移动
"*y : 复制选择区域到paste buffer
V% : 选择一个匹配段
V}J : 合并一个段落
V}gJ : 合并一个段落,并保留空格

----------------------------------------
▼删除选中的10行的前两个字符(不过这里应该假设是紧凑的排版格式,不能包含空格、tab等字符的,可是经实验应该是前3个字符才对啊??)
0<c-v>10j2ld

----------------------------------------
▼如何用可视块拷贝几列
▼可视块(并非通常的 v 命令)
<C-V>,然后通过移动命令选择列 (win32 <C-Q>)
然后执行 c,d,y,r 等命令

----------------------------------------
▼用另外一个此类的块,覆盖可视块中的文本
ctrl-v move "ay : 选中第一块
ctrl-v move c ctrl-o "aP <esc> : 选中第二块

----------------------------------------
▼_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<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行到a寄存器
"a5yy
10j
"A5yy

----------------------------------------
[I : 显示当前行中字符的所有匹配(超级有用)

----------------------------------------
▼常规缩进
:'a,'b>> : 将mark a到mark b之间的内容进行两次缩进

▼虚拟模式下缩进 (可重复)
:vnoremap < <gv

# 这是一个虚拟模式下的键盘映射 < 映射为<gv
# < 意为向内缩进,gv 上面已有解释,为重复上次选区
# <gv 也就是先向内缩进然后再选择刚才的选区
# 这样就可以只按 < 实现重复缩进了

:vnoremap > >gv : 向内缩进,原理同上

▼块缩进
>i{
>a{

▼或者
>% and <%

# 自己试试看吧,涉及到用 { 的语言很有用,比如c,c++等

----------------------------------------
▼重定向 & 粘贴到寄存器 * (*为寄存器名称)
:redir @* : 重定向命令到paste缓冲区
:redir END : 结束
:redir >> out.txt : 重定向到文件

▼操作粘贴缓冲区
"*yy : 复制到寄存器
"*p : 从寄存器中粘贴一行

▼复制到粘贴缓冲区 (扩展模式)
:'a,'by* : 复制一个范围到粘贴寄存器
:%y* : 复制一个括号匹配到粘贴缓冲区
:.y* : 复制当前行到粘贴缓冲区

▼从剪贴板上过滤非可打印字符
# 当从一些 GUI 程序粘贴时会有用处
:nmap <leader>p :let @* = substitute(@*,'[^[:print:]]','','g')<cr>"*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

▼访问粘贴缓冲区中的内容 (放置到脚本/批处理文件中)
gvim -c 'normal ggdG"*p' c:/aaa/xp

▼将粘贴的内容送往默认的打印机
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 陷阱
在正则表达式中 + | ( { 都要加上转义符(反斜杠)
/fred\+/ : 匹配 fred/freddy 但不匹配 free
/\(fred\)\{2,3}/ : 注意你必须加上反斜杠

----------------------------------------
▼\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]")

----------------------------------------
▼控制寄存器
:let @a=@_ : 清除寄存器 a
:let @a="" : 同上
:let @*=@a : 拷贝寄存器 a 到 paste buffer
:let @*=@: : 拷贝最后执行的命令到 paste buffer
:let @*=@/ : 拷贝最后执行的查找命令到paste buffer
:let @*=@% : 拷贝当前文件到 paste buffer

map <f11> "qyy:let @q=@q."zzz"

----------------------------------------
▼帮助的帮助 (使用 TAB)
:h quickref : VIM 快速参考页
:h tips : Vim'自己的技巧帮助
:h visual<C-D><tab> : 虚拟模式的帮助列表
: 然后使用tab选择它们
:h ctrl<C-D> : 所有关于ctrl键的帮助列表
:helpg uganda : 过滤帮助文件 使用 :cn, :cp 查找下一个及后一个
: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-[>, <C-T> : 在帮助履历中往后 & 往前移动
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 <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

----------------------------------------
▼创建一个新的缓冲区,将寄存器q的内容粘贴进去,然后对缓冲区内容排序
:new +put q|%!sort

----------------------------------------
▼插入DOS换行符
:%s/$/\<C-V><C-M>&/g : <C-V>为ctrl-v
:%s/$/\<C-Q><C-M>&/g : 对于Win32应该换成ctrl-q
:%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 : 重新选择前一个可视区域 (高级!)

----------------------------------------
▼在文件中插入行号
:g/^/exec "s/^/".strpart(line(".")." ", 0, 4)
:%s/^/\=strpart(line(".")." ", 0, 5)
:%s/^/\=line('.'). ' '

----------------------------------------
▼用VIM的方式来编号行
:set number : 显示行号
:map <F12> :set number!<CR> : 反转显示行号
:%s/^/\=strpart(line('.')." ",0,&ts)

▼从任意行开始编号(需要perl)
:'a,'b!perl -pne 'BEGIN{$a=223} substr($_,2,0)=$a++'

▼产生数字列表
# 在一个空文件的某一行中输入数字223
qqmnYP`n^Aq : in recording q repeat with @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)/
▼给 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> : 滚动,只要在insert中保持put

----------------------------------------
# 加密(小心使用,不要忘了密码)
: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/[<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]/" : same thing

# 将非ascii字符,拉到搜索条上
yl/<C-R>"
/[^a-zA-Z0-9_[:space:][:punct:]] : search for all non-ascii

----------------------------------------
▼文件名自动完成 (例如 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

----------------------------------------
▼把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 : 显示标记 (函数列表)
<C-]> : 跳转到光标处的函数

----------------------------------------
▼将csv文件分栏,以便仅显示宽行的字符
: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

▼高亮显示特定的csv列 (放入.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 : 高亮显示第5列

----------------------------------------
▼折叠:隐藏某些片断,使查看更容易
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 % : 显示文件名
<C-R>% : 插入文件名 (插入模式)

"%p : 插入文件名 (普通模式)
/<C-R>% : 在文本中查找文件名

----------------------------------------
▼删除,但不破坏 buffer 内容,"_为黑洞寄存器,相当于linux上的/dev/null
"_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>

----------------------------------------
▼你自己设置高亮显示的例子
:syn match DoubleSpace " "
:hi def DoubleSpace guibg=#e0e0e0

----------------------------------------
▼重新逐字产生前面一行
:imap ] @@@<ESC>hhkyWjl?@@@<CR>P/@@@<CR>3s : 此种复杂的映射,解释,会害人的:)首先,输入@@@,然后ESC回到普通模式,hh是往左移动两个字符,就是到了第一个@上,然后k是到上一行。y表示yank,拷贝,W是指拷贝到大单词的结束。j是往下一行,就是回到原来一行,l表示往右移动一个字符,以便下面的?查找。?是向上查找,找的内容是@@@。<CR>回车执行后,P是指将寄存器中的内容(即上一行的完全内容)拷贝到@@@之前,然后再用/查找@@@。3s表示删除3个字符(就是@@@),并切换到插入模式。
:nmap ] i@@@<ESC>hhkyWjl?@@@<CR>P/@@@<CR>3s

▼根据文件类型映射快捷键
:autocmd bufenter *.tex map <F1> :!latex %<CR>
:autocmd bufenter *.tex map <F2> :!xdvi -hush %<.dvi&<CR>

----------------------------------------
▼读取 MS-Word 文档,需要有antiword(一个免费的word文档阅读器)
:autocmd BufReadPre *.doc set ro
:autocmd BufReadPre *.doc set hlsearch!
:autocmd BufReadPost *.doc %!antiword "%"

----------------------------------------
▼折行的方法
▼第一行是设置选项,让系统认为<<<和>>>是折行标记,后面三行放到正文中,就看到折叠效果了
:se filetype=help foldmethod=marker foldmarker=<<<,>>>
A really big section closed with a tag <<<
--- remember folds can be nested ---
Closing tag >>>

----------------------------------------
▼另一个Vim黑客的JAVH
vim -c ":%s%s*%Cyrnfr)fcbafbe[Oenz(Zbbyranne%|:%s)[[()])-)Ig|norm Vg?"
# 启动vim的时候执行了一个命令
# 先写入了Please-sponsor-Bram-Moolenaar的rot13编码,然后再解码

※注: 本文来自网络,本人只是加以整理和重新排版。
(原文地址: http://rayninfo.co.uk/vimtips.html)

正则表达式:给HTML的属性值加引号

, ,

替换前: ([A-Za-z]+)=([#A-Za-z0-9_%]+)
替换后: \1="\2"

这是用EmEditor一次替换的方法,其他支持正则表达式的编辑器应该是大同小异。

目前发现的缺点:

content="text/html; charset=utf-8"
会被替换成
content="text/html; charset="utf"-8"

还有JavaScript的变量赋值得地方也需注意。

Vim的窗口分割

,

Vim的窗口分割命令总结如下:

:sp 上下分割窗口
:sp 文件名 编辑指定文件并上下分割窗口

:vsp 左右分割窗口
:vsp 文件名 编辑指定文件并左右分割窗口

Ctrl-w p 在窗口间切换
Ctrl-w k 移到上面窗口
Ctrl-w j 移到下面窗口
Ctrl-w l 移到右面窗口
Ctrl-w h 移到左面窗口

Ctrl-w + 扩大光标所在窗口
Ctrl-w - 缩小光标所在窗口
Ctrl-w = 使窗口大小一致

推荐两个Vim的插件

,

1.snippetsEmu
自动产生代码片段的插件。

安装:
# mkdir -p ~/.vim/after/ftplugin
# vim snippetsemu1_1.vba
:so %


使用:
编辑一个Perl文件,输入:

for<tab><tab><tab><tab>
或
for<tab>i<tab>100<tab><tab>

即可了解该插件的功能。

2.MiniBufExplorer
类似UltraEdit和Editplus的Tab,同时编辑多个文件的时候非常有用。

安装:
# cp minibufexpl.vim /usr/share/vim/vimcurrent/plugin

使用:
在gVim下可以用鼠标点击来切换当前编辑的文件。
在Console下,先用<Ctrl-w-k>激活MiniBufExplorer区,然后用<Tab>或<Shift-Tab>进行文件切换。

实际上,用:bn或:bp即可在文件之间切换(可以在设置文件中绑定按键)。
November 2009
S M T W T F S
October 2009December 2009
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30