Install
获取最新的 VIM 源码
$ cd /data/install/setupfiles/
$ hg clone https://vim.googlecode.com/hg/ vim
$ cd vim
$ hg pull
$ hg update
编译、安装
在 Mac OS 下编译安装有一条原则,“永远不要覆盖 /usr/bin 下的文件”.
为了避免因卸载、覆盖自带的 VIM 带来不必要的麻烦,我们将 VIM 安装在 /opt/local 下。
因为 Mac OS X Mountain Lion 内置的 VIM 位于 /usr/bin/vim.
这样, 如果出现不兼容的问题,我们只需要删除 /opt/local 下的文件即可。
$ which vim
/usr/bin/vim
$ vim --version
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Jun 20 2012 13:16:02)
Compiled by root@apple.com
$ ./configure --prefix=/opt/local --with-features=huge --enable-pythoninterp=yes --enable-multibyte --with-vim-name=vim
$ make
$ sudo make install
修改系统环境变量 PATH
确认 ~/.bash_profile 中存在以下配置
export PATH=/opt/local/bin:$PATH
使 /opt/local/bin 优先于 /usr/bin
重新加载 bash_profile,使配置生效 (即使上面的配置已存在,也要运行下面一行)
$ source ~/.bash_profile
确认安装成功
$ which vim
/opt/local/bin/vim
$ vim --version
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Oct 8 2012 10:44:22)
MacOS X (unix) 版本
包含补丁: 1-684
编译者 zhongwei@Sun-Zhongweis-MacBook-Pro.local
果然间接修复了 Mac 自带 VIM 导致 VimWiki 链接地址不能自动隐藏的问题。
参考:
- http://stackoverflow.com/questions/7211820/update-built-in-vim-on-mac-os-x
问题
若用上面的设置在 Ubuntu 12.04 上安装 VIM,查看 vimrc 时,会发现中文变成了乱码。
若采用 apt-get 安装则没有这个问题。
卸载
sudo make uninstall
- http://stackoverflow.com/questions/1439950/whats-the-opposite-of-make-install-ie-how-do-you-uninstall-a-library-in-lin
Seven habits of effective text editing
http://www.moolenaar.net/habits.html
Pipe visually selected text into another file
选中需要处理的文本
:'<,'>w ~/Download/tmp.txt
若是想 pipe to a command
:'<,'>w !some_command
重新加载 vim 配置文件
:so ~/.vimrc
so is short for source
plugin layout in .vim directory
http://learnvimscriptthehardway.stevelosh.com/chapters/42.html
若要修改特定文件类型的默认 TAB 缩进,先将自带的配置文件从下面目录复制到自己的 目录,然后修改即可。
Mac OS 上 vim 的默认安装目录
/usr/share/vim/vim73/ftplugin
vi command pattern
(command)(number)(text object)
等同于
(number)(command)(text object)
第一种写法,读起来顺口; 但是有时候只能用第二种写法,例如:50i-
NERDTree
enable help doc
:helptags ~/.vim/doc
show help
:help NERDTree
use NERDTree
:NERDTree
refresh NERDTree:
- r -> current directory
- R -> root directory
taglist
http://www.vim.org/scripts/script.php?script_id=273 由于 taglist 依赖于 Exuberant Ctags,而 Mac OS 下的 ctags 是 UNIX ctags。 所以需要手动安装 Exuberant Ctags.
./configure && make && sudo make install
(Ubuntu: sudo apt-get install exuberant-ctags) 然后修改 .vimrc , 加入下面的配置
let Tlist_Ctags_Cmd="/usr/local/bin/ctags"
show help
:help :TlistToggle
use taglist
:TlistToggle
Paste registers in search or colon commands instead of using the clipboard
You can type Ctrl-R to insert a register when in insert mode, or when typing in the command or search line.
在 insert mode, 或者输入 vim 命令,搜索时,如果输入
在命令模式下,可以通过
include-search for c programming
Vim knows about include files, and can search them for a word you are looking for. The most common action is to lookup the prototype of a function. Position the cursor on the name of the function in your file and type [I: Vim will show a list of all matches for the function name in included files.
其他相关命令参见:help include-search
format json string in VIM
:%!python -m json.tool
这里的 % 和查找替换时的作用一样,指选中 buffer 中的所有行。 所以,可以在写程序注释时,这样使用: 先输入一整行 json,为了快速输入,首次输入时,不进行排版
{"1": "http://...", "2": "http://...", "3": "http://..."}
然后使用 Ctrl-v 选中这行,输入
:!python -m json.tool
注意: 需要将单引号都转换为双引号
:%s/\'/"/g
使用 :vimgrep + :cope 在 VIM 中遍历 grep 的搜索结果
例如我要遍历搜索所有包含 RequestHandler 的代码
新建一个 tab 页,否则搜索结果会覆盖掉当前窗口中的内容
:tabnew
搜索, 当前窗口显示的是包含匹配的整个文件内容
:vimgrep RequestHandler **/*.py
显示所有匹配的列表
:cope
convert dos format to unix format
set ff=unix
不转换格式带来的问题, 例如将一个 python 文件加上可执行权限,执行时会报错:
env: python\r: No such file or directory
因为 dos format 是用 \r\n 做换行
反之亦然
set ff=dos
Auto format pasted code
我们从网上复制代码到 VIM 的时候,会变成逐行缩进的格式。那是因为每个换行都被 处理成了新的缩进。进入 paste-mode 就能避免这种问题。
:set paste
粘帖,之后退出 paste-mode.
:set nopaste
正则匹配中的特殊字符
http://vim.wikia.com/wiki/Search_and_replace
查找替换前进行确认 (confirm)
:%s/python/ipython/gc
Joining Two Lines
J
write with sudo
:w !sudo tee % > /dev/null
- http://stackoverflow.com/questions/2600783/how-does-the-vim-write-with-sudo-trick-work
这个不太容易记住,可以自定义一个命令 Sudow 来执行. 在 .vimrc 里加入:
command Sudow execute "w !sudo tee % > /dev/null"
vim 中切换 panes
Ctrl-w h,j,k,l
移动到匹配的括号,以及C语言的注释 /* */,
以及 preprocessor conditional: #if, #ifdef, #else, #elif, #endif. TODO: 增加对模版语言及HTML标签的支持
%
数字自增列操作
实现一:
将一列数字全部自增一,例如原来是从 0 开始的,改为 1 开始
Ctrl-a 是光标处数字的自增,qa 录制一下, 每行执行一下即可。
若要生产一列自增数字 N 行, 从 1 开始
1 qa yy p Ctrl-a q
实现二(vimscript):
:for i in range(1, 10)|put =i|endfor
:for i in range(1, 10)|put ='current num is: '.i|endfor
Line complete
Ctrl-x Ctrl-l
更改 vim 的工作目录
cd <dir>
change word
- cw: To the end of a word
- c2b: Back 2 words
- c$: To the end of line
- c0: To the beginnging of line
- c2w: change 2 words
- cc: Change one line. (类似的:yy, dd)
switching to the previously edited buffer
Ctrl-6
在 VIM 中显示特殊符号 (例如,回车、TAB)
set list/set nolist
- 回车会显示成 $
- TAB 会显示成 ^I
vim with pyflakes "redefinition of unused" problem
加一个 assert 作为一个绕过的方法
try:
import json
assert json # silence pyflakes
except ImportError:
from django.utils import simplejson as json # Python 2.4 fallback.
参考:
- http://stackoverflow.com/questions/5033727/how-do-i-get-pyflakes-to-ignore-a-statement
指定文件类型
在新建一个没有文件名后缀的文件,或者一个没有文件名的 buffer 时, 是没有文件类型的,提示栏的 TYPE 为空。
如果我们需要使用特定文件类型对应插件的功能时,那么这里可以指定一个文件类型。 例如,我们想使用 vimwiki 插件的特性:
:set filetype=VIMWIKI
搜索时忽略大小写
例如我要搜索 Zhongwei 或者 zhongwei 或者 ZHONGWEI
/zhongwei\c
将配置写在代码文件里
使用 modeline
- https://wiki.python.org/moin/Vim
交换 vs 打开的两个 window 的位置
ctrl-w r (rotate)
git mergetool
+--------------------------------+
| LOCAL | BASE | REMOTE |
+--------------------------------+
| MERGED |
+--------------------------------+
参考
- http://vim.wikia.com/wiki/A_better_Vimdiff_Git_mergetool
与系统共享剪切板
选取待复制的文本后,输入 "+y
在浏览器中打开当前链接
If you are using Vim 7.4 or later, in normal mode, put your cursor below the URL, then click gx, the URL will be opened in browser automatic.