Vim
简介
我是 Vim 爱好者(但不排斥Emacs),这里收录一些Vim相关的文字。
Vim 是什么?如何下载、安装之类的本身很简单,而且网络上有诸多的介绍,这里不再赘述。至于为什么使用 Vim?我就不劝你了。
传说Vim的学习曲线很陡,确实如此。不过越是陡峭,只要持续付出,每前进一点,就越是有成倍的提升,这是好事。
这里是 我的个人vim项目 ,包含有配置文件、部分插件及根据自身习惯改写的资源文件。项目目录结构基本保持和vim安装目录一致,另外有一个 Addons目录 ,主要用来放置和vim有关,但不适合放在Vim安装目录中的资源或工具文件。
我的大部分设置及插件都可以从 _vimrc 中看出端倪,另外也可以参考我写的部分 涉及vim的文章 已失效 。
- Vim7 的新功能
- 程序员的编辑器——VIM(zz) -- (有一些不错的介绍和资源链接,有时间整理到本页) ^2^
- EMACS 对 vi:永无止境的圣战 2 en
- 贫穷的VIM作者Bram Moolenaar en
- Vi-IMproved
精准广告投放
另外我发起了一个 *“Vim 脚本 文档中文计划”* ,欢迎有热忱、有兴趣的朋友参与。
希望相互交流学习,可以加入 *Vim 的 GTalk 群*
教程
- 大家來學 Vim ^2^
- 文档
- PPT
- Vim Hacks (林佑安)
- Perl.Hacks.On.Vim (林佑安)
- Vim Editor in English
- Kim Schulz Hacking Vim
- Vim para Desenvolver
- How To Trace Code Like Source Insight Through Vim
- VIM for (PHP) Programmers
- Vim For Php
- Video
选项(Options)
编码(Encoding)
" encoding set encoding=utf-8 set termencoding=utf-8 if has('win32') set fileencoding=chinese else set fileencoding=utf-8 endif "set fileencodings=ucs-bom,utf-8,chinese,latin-1 set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1 set langmenu=zh_CN.utf-8 source $VIMRUNTIME/delmenu.vim source $VIMRUNTIME/menu.vim language messages zh_cn.utf-8
可以参考:
字体(fonts)
if has("win32") set guifont=Courier_New:h12:cANSI "set guifontwide=YouYuan:h11:cGB2312 endif
- Windows下的Gvim使用微软雅黑字体
- 可以使用任何字体的gvim for windows
- 苹果的 Courier 字体不错
- Windows 下 gVim 的雅黑字体配置
- HOW TO: 使用 ClearType 增强屏幕字体
- vim字体设置
Windows gvim 启动时默认激活最大化。
au GUIEnter * simalt ~x
参考 :h gui-win32-maximized
其他操作系统可以参考 在kde中让gvim自动最大化 和 在Gnome下让GVIM自动最大化
设置宽度不明的文字(如 “”①②→ )为双宽度文本 参考。
set ambiwidth=double
高亮光标所在行(我选择不改变前景和背景色,只加了一条下划线):
set cursorline hi cursorline guibg=NONE gui=underline
注:高亮当前行在一定程度上会影响 Vim 的性能,降低缓冲区更新速度。
diff 模式下:
- 同步两侧的光标位置;
- 设置 <F7> 和 <F8> 分别跳转到上一个不同、下一个不同处,如果不是 diff 模式,则分别设置为 QucikFix 的上一条、下一条信息行。
" @see http://vim.wikia.com/wiki/Selecting_changes_in_diff_mode if &diff let g:origCursorPos=getpos('.') autocmd WinEnter * :call setpos('.', g:origCursorPos) autocmd WinLeave * :let g:origCursorPos=getpos('.') nmap <F7> [c nmap <F8> ]c else map <F7> :cp<cr> map <F8> :cn<cr> endif
有一个办法可以让 Vim 的默认寄存器和系统剪贴板共享,在 vimrc 中加入:
" share system clipboard. set clipboard+=unnamed
由于 Vim 寄存器比系统剪贴板强大太多,为了避免共享时相互干扰,我自己没有这样做。
另外,我不推荐,但是如果你希望 Vim 启动时自动进入插入模式,可以在 vimrc 中加入:
" Set default mode:insert. exe "startinsert"
映射(Mapping)
普通模式,可视模式和选择模式下使用 <Tab> 和 <Shift-Tab> 键来缩进文本。在可视模式和选择模式下,可以自动恢复选中的文本。
" Normal Mode, Visual Mode, and Select Mode, " use <Tab> and <Shift-Tab> to indent " @see http://c9s.blogspot.com/2007/10/vim-tips.html nmap <tab> v> nmap <s-tab> v< vmap <tab> >gv vmap <s-tab> <gv
选中一段文字并全文搜索这段文字
vnoremap * y/<C-R>=escape(@", '\\/.*$^~[]')<CR><CR> vnoremap # y?<C-R>=escape(@", '\\/.*$^~[]')<CR><CR>
自动补全成对的括号、引号
"inoremap ( ()<ESC>i inoremap ( <c-r>=OpenPair('(')<CR> inoremap ) <c-r>=ClosePair(')')<CR> "inoremap { {}<ESC>i inoremap { <c-r>=OpenPair('{')<CR> inoremap } <c-r>=ClosePair('}')<CR> "inoremap [ []<ESC>i inoremap [ <c-r>=OpenPair('[')<CR> inoremap ] <c-r>=ClosePair(']')<CR> "inoremap < <><ESC>i inoremap < <c-r>=OpenPair('<')<CR> inoremap > <c-r>=ClosePair('>')<CR> function! OpenPair(char) let PAIRs = { \ '{' : '}', \ '[' : ']', \ '(' : ')', \ '<' : '>' \} let ol = len(split(getline('.'), a:char, 1))-1 let cl = len(split(getline('.'), PAIRs[a:char], 1))-1 if ol==cl return a:char . PAIRs[a:char] . "\<Left>" else return a:char endif endfunction function! ClosePair(char) if getline('.')[col('.') - 1] == a:char return "\<Right>" else return a:char endif endf inoremap ' <c-r>=CompleteQuote("'")<CR> inoremap " <c-r>=CompleteQuote('"')<CR> function! CompleteQuote(quote) let ql = len(split(getline('.'), a:quote, 1))-1 " a:quote length is odd. if (ql%2)==1 return a:quote elseif getline('.')[col('.') - 1] == a:quote return "\<Right>" else return a:quote . a:quote . "\<Left>" endif endfunction
普通模式下使用空格键。
" <Space> key at normal model. nmap <Space> i<Space><Esc>l
插入模式下使用 Meta 键(Windows下是Alt键)+自定义快捷键来移动光标。
" use Meta key(Windows:Alt) to move cursor in insert mode. " Note: if system install "Lingoes Translator", " you will need change/disabled hot key. noremap! <M-j> <Down> noremap! <M-k> <Up> noremap! <M-h> <left> noremap! <M-l> <Right>
使用 Windows Explorer 打开当前文件所在文件夹,并选中当前文件。
" Open Windows Explorer and Fouse current file. " %:p:h " Just Fold Name. if has("win32") nmap <F6> :!start explorer /e,/select, %:p<CR> imap <F6> <Esc><F6> command -nargs=0 Explor :!start explorer /e,/select, %:p command -nargs=0 Explorer :!start explorer /e,/select, %:p endif
切换 Quickfix 窗口的打开和关闭状态。
nmap <F4> :cw<CR>
默认隐藏菜单栏和工具栏,可以通过 <F12> 切换显示和隐藏。
" Toggle Menu and Toolbar " @see http://liyanrui.is-programmer.com/articles/1791/gvim-menu-and-toolbar-toggle.html set guioptions-=m set guioptions-=T map <silent> <F2> :if &guioptions =~# 'T' <Bar> \set guioptions-=T <Bar> \set guioptions-=m <bar> \else <Bar> \set guioptions+=T <Bar> \set guioptions+=m <Bar> \endif<CR>
在保存文件时自动去除无效空白,包括行尾空白和文件最后的空行。
" Remove trailing whitespace when writing a buffer, but not for diff files. " From: Vigil " @see http://blog.bs2.to/post/EdwardLee/17961 function RemoveTrailingWhitespace() if &ft != "diff" let b:curcol = col(".") let b:curline = line(".") silent! %s/\s\+$// silent! %s/\(\s*\n\)\+\%$// call cursor(b:curline, b:curcol) endif endfunction autocmd BufWritePre * call RemoveTrailingWhitespace()
外观(Theme,Color Scheme)
- 隐藏 gvim 的工具栏和菜单
- Vim for Windows 的全屏插件
- Vim Color Scheme Test
- color sampler pack
- VimTweak : The tweaking dll for GVim.exe.
半透明效果,Linux下可以在终端使用Vim。
- Color Sampler Pick
- Color Theme Generator - 随机生成Vim主题。
- manuscript : Dark colorscheme
- molokai : A port of the monokai scheme for TextMate
- Darkburn : A darker mod of Zenburn - 在终端显示效果比GUI下要好。
- The last Vim color scheme you'll ever need - 这是模仿针对 TextMate 的 IR_Blank 主题。
- Ir_black vim/textmate custom color scheme in MonoDevelop
Syntax
- Doxygen注释
- VIM 小技巧 (2): Doxygen Syntax
- Doxygen syntax coloring in Vim
- doxygen+VIM文档实用指南for C/C-liked Programmers
- Doxygen
- HTML
Indent & Formats
- Artistic Style(astyle) project - for C, C++, C#, and Java Source Code.
- Pythius project
插件(Plugins)
- Vim Plugins You Should Know About, Part I: surround.vim
- TagList^script#273^
- ctags
- ctags的使用及相关参数介绍^RT^
- How to add CSS support to ctags
- Javascript
- snipMate
- XPTemplate^2^(screencast in C, screencast in python)
- Sparkup
- Zen-Coding
- ZenCoding.vim : vim plugins for HTML and CSS hi-speed coding.
- 在Vim里玩Zen Coding
- 在Vim里玩Zen Coding
- ZenCoding.vim - 有一个文本 movies 介绍。
- surround^2^^Vim Plugins You Should Know About, Part I: surround.vim^
- Vimwiki
- TxtBrowser
- txtbrowser - a vim script to browse plain text easily(show the title tag and syntax highlight)
- TxtBrowser : 纯文本浏览器(显示文本文件的目录树和语法高亮)
- TxtBrowser: 在 Vim 中高效处理纯文本
- VOOF
- txtfmt
- Python
- Vim as Python IDE
- vimpdb - Integrated Python debugging within Vim.
- 自动补全
- File Type
- CSS3
- 搜索(Search)
- MultipleSearch : Highlight multiple searches at the same time, each with a different color. | MultipleSearch2.vim : Improve Multiple search - 这两个 Multiple Search 项目已经搁置,另外 mark.vim 是更好的选择。
- 注释文档(Comments Docs)
- PDV - phpDocumentor for Vim : Provides really comfortable generation of phpDocumentor doc blocks for PHP4 & 5.
- The NERD Commenter : A plugin that allows for easy commenting of code for many filetypes.
- comments.vim : To Comment/Un-Comment single/multiple lines of code for different source files
- Java
- Vim JDE : Vim - Just a Development Envirement (Java/C++) ^site 2^
- javacomplete : Omni Completion for JAVA
- YUI
- jQuery
- Blog
- twitvim - Twitter Client for Vim ^2 3^
- Twitter : Post to Twitter from Vim - 已由 twitvim 替代。
- Vim Script – Twitter (Patched)
- Twitter : A simple client for Twitter (script#1853)
- 输入法(IME)
- VimIM —— Vim 中文输入法
- VimIM —— Vim 中文输入法
- VimIM : Vim Input Method -- Vim 中文输入法
- ywvim : Another input method(IM) for VIM, supports all modes.
- 数据库(Database)
- Shell
- conque - Run interactive commands inside a Vim buffer.
- 其他
- vim-sztool - Some python+vim mixed script to extend the function of vim. - shrek.wang 基于 Python 写的插件。
技巧 (Tips)
- vimrc (仅供参考)
- 跳转(Jumps)
- 正则表达式:
- 文本对象 (Text Object)
- 杂项
打开、保存文件时,显示文件选择对话框,更多可以 :h browse
。
:browse w<cr> :bro e<cr>
- Vim 实用技术,第 1 部分: 实用技巧
- Vim 实用技术,第 2 部分: 常用插件
- Vim 实用技术,第 3 部分: 定制 Vim
- 使用脚本编写 Vim 编辑器,第 1 部分: 变量、值和表达式
- 使用脚本编写 Vim 编辑器,第 2 部分: 用户定义函数
- 使用脚本编写 Vim 编辑器,第 3 部分: 内置列表
- 使用脚本编写 Vim 编辑器,第 4 部分: 字典
- 使用脚本编写 Vim 编辑器,第 5 部分: 事件驱动的脚本编写和自动化
- 神奇的VIM
- 技巧:Vimdiff 使用
- Best of Vim Tips 中文
- 自動去除不必要的空白
- 面向前端开发者和TextMate粉丝的vim配置 - 混沌海狂想
- 进行有效编辑的七种习惯
- 手把手教你把Vim改装成一个IDE编程环境(图文)
其他技巧 (Tips)
- Vim 技巧(tips)
- Program
- 翻译取词
- PDF 利用 Vim 來編修 PDF 檔
- 其他
Cheat Sheet
- Vim Commands Cheat Sheet^2^
- Graphical vi-vim Cheat Sheet and Tutorial - 非常非常好的Vim键图。
- 给程式设计师的Vim入门图解说明
集合
- 善用佳软 (hashtags#gvim)
- Gracecode (hashtags#vim)
- vim那点儿事儿
- Vim编辑器vim编辑器的技巧、经验、资源等收集。
- vim使用进阶 - 易水博客
- 碎碎念 (hashtags#vim)
- AutoComplPop : Automatically opens popup menu for completions
- DoxyGen Syntax : DoxyGen Highlighting on top of c/c++/java
- DoxygenToolkit.vim : Simplify Doxygen documentation in C, C++, Python.
- Fork of hallettj/jslint.vim @see JSLint的Vim插件,支持高亮显示错误代码以及Quickfix模式。Fork过来打了个读取~/.jslintrc的小补丁。
- ctags
- maycode.com (linuxdevelop)
- 文章列表 - vim点滴
- 紅塵一隅間拾得 - vim
- JDany''s World (hashtags#vim)
- 牧马志 (hashtags#vim)
- searun的专栏 (hashtags#Hacking VIM)
- 星光居士的工作室 (hashtags#vim)
- good coder code, great reuse (hashtags#vim)
- Swaroop CH (hashtags#vim)
- Windstorm(hashtags#vim)
- Vi Vim Tips and Tricks
- Vimer的程序世界
- 七星居(hashtags#vim)
Vim 脚本开发
延伸阅读
原生 Vim
- Vim^2^ - 原生 Vim,包括Vim, gVim, gVim Easy. 支持 Windows, Linux, Mac 平台。
- Win32 and Win64 releases of Vim (Vi IMproved)
- macvim - Vim for the Mac
- 继续补充vim配置技巧——上次的vimrc还不够强力 - 混沌海狂想
- vim-cocoa - A new branch of gvim to use Cocoa for GUI - 相当 macvim 较轻量级的 Mac 版本。
- ViMate - a vi plugin for TextMate^2^
Vim Like
- Eclipse
- Vrapper — Vim-like editing in Eclipse
- Vimplugin
- Viplugin
-
许可证:将
Xq@a*4
存储为 viPlugin.license 文件,放至 Eclipse 根目录下。 - 反编译:
- 下载程序包。
- 解压到相应目录 。
- 用解压缩程序解开 /ViPluginEclipseLayer_1.8.6//lib/ViImplementation.jar 。
- 找到 com.mbartl.license.CheckLicenseFile.class 用文本编辑器打开。
- 修改偏移0x54F处的9A为99 (不用找地址,这个文件里只有一个9A),保存。
- jar cvf ViImplementation.jar * -_-! 替换原来的ViImplementation.jar
- 进入eclipse,点击菜单项 VI-〉Load 什么什么的那个,记下提示没有license文件的目录。
- 进入那个目录建立一个文件名字为viPlugin.license 即可。
- 回到eclipse 点击VI-〉Load 什么什么的那个。 处于VI 编辑的状态。
- Eclim Eclim (Eclipse + Vim)
- NetBeans
- Firefox
- Vimperator
- jv-extension (A Firefox extension that emulates Vim in all html textareas) Addons
- Textarea viEditor
- Firefox with vi(m) keybindings
- Google Chrome
- Vimium - Vim for Chrome
- vimlike-smooziee - Google Chrome extension which behaves like vim or vimperator
- vime - A vim operation style like plugin for google chrome.
- Opera
- 即时通讯(IM)
- The Mail Suite(tms): Send,Receive and Organize mail from within VIM
- vimmailr.zip : Send (MAPI) mail from vim
- 用Vim(gvim)发邮件(上流哇)
- [http://www.vim.org/scripts/script.php?script_id=813 mail.vim: Syntax file for emails.
- How to send eMail with Vim and Thunderbird
- Office
- ViEmu - Vi/vim emulation for Visual Studio, Word, Outlook and SQL Server
- ViWord
-
Vigor
漫画:如果 Vim 是微软设计的。 - File Manager
- Player
- Develop
- The Go Programming Language
- go.vim^vimscript#2854^
- Vimacs (gvim里设置配色方案、字体、使用tabs以及模拟Emacs的键绑定)
Vim Games
- TeTrIs.vim : A tetris game in pure vim^2^ - Vim 中的俄罗斯方块游戏。
- Mines : Play Mines with vim
- sokoban.vim : Sokoban Game for Vim! - 推箱子。
- Nibble : Nibble or Snake game for Vim.
- Mastermind board game : The board game
- Tower of Hanoi : Tower of Hanoi game for Vim
- matrix.vim : Matrix screensaver for VIM - 模仿黑客帝国的屏保。
- rubikscube.vim : a rubik's cube game in vim script
- NetHack^NetHack - Falcon's Eye 如果妳一生祇打算做一件事的話,玩 NetHack^
书籍(Books)
Vim Cookbook - by Steve Oualline Vim Recipes
社区
- Vim-cn
- 豆瓣Vim小组
- Vim-Taiwan
- 水木社区VIM版
- vimcn@chatterous.com - GTalk,Email,Web,SMS,Twitter等多种通讯方式,参考 欢迎加入 Vim 的 GTalk 群
- QQ 群:Vim 草堂(28971390) - 撇开腾讯不说,这个群的氛围是非常不错,卧虎藏龙,而且都很热心。
- Vimer
幽默 & 文化
via: Vim vs. Emacs
via: REAL PROGRAMMERS
请在 Vim 中输入命令: :help!
或使用缩写 :h!
请在 Vim 中输入命令: :h 42
探索生命的意义。
请在 Vim 中输入命令: :h howto
并看文档的最后。
世界上的程序员分三种, 一种使用 Emacs, 一种使用 Vim, 剩余的是其它。
给人一条 Vim 命令, 他能折腾一晚上; 告诉他怎么自定义 Vim 命令, 他能捣腾一辈子. -- Emacs
《大腕》编辑器版:
..周围同事不是用 Vim 就是 Emacs , 你要是用一 UltraEdit,你都不好意思跟人家打招呼… 什么插件呀,语法高亮呀,拼写检查呀,能给它开的都给它开着,就是一个字儿:酷。 你说这么牛B一东西,怎么着学会也得小半年吧。 半年!入门都远着呢,能学会移动光标就不错了,你还别说耗不起,就这还只是左右移动
对我来说 Vi 是禅, 使用 Vi 就是使用禅。 每个命令都是心印, 这对用户来说是深奥的, 对未入门者来说是无法了解的。 每次使用它你都能发现真理。 --Satish Reddy
商业化产品可能是有用的, 但最好的东西往往是免费的, 空气,水,Vim。