我的理想备忘单是30-40最常用的按键或命令,每个人每天用于编写代码,以及rubyists每天使用的绝对必要的插件和10个最常用的命令为他们。在理论上,一旦我有了,并开始成为精通VIM,因为我在Textmate,然后我可以开始学习数以千计的其他VIM命令,将使我更有效率。
或者,我是否以错误的方式学习VIM?
参考文献
> vim documentation online
> advanced vim tips
> more useful tips和graphical cheat sheet
一般
>几乎所有命令前都可以有一个重复计数的数字。例如。 5dd删除5行
>< Esc>让你退出任何模式并返回命令模式
>命令前面的:在屏幕底部的命令行上执行
>:帮助任何命令
导航
>光标移动:←h↓j↑k l→
>用词:
> w next word(by punctuation); W下一个字(由空格)
> b back word(by punctuation); B背字(用空格)
> e结束词(通过标点符号); E结束字(用空格)
>按行:
> 0开始行; ^第一个非空格
> $ end of line
>按段:
> {prevIoUs blank line; }下一个空白行
>按文件:
>按标记:
> mx set mark x; ‘x去标记x
>’。转到上次编辑的位置
>”跳回到最后一个点
>滚动:
> ^ F向前全屏; ^ B向后全屏
> ^ D下半屏; ^ U上半屏
> ^ E向上滚动一行; ^ Y向下滚动一行
> zz中心光标线
编辑
> u undo; ^ R重做
>。重复最后编辑命令
插入
所有插入命令都以< Esc>返回命令模式。
> i在光标处插入文本;我在行的开头插入文本
>在光标后添加文本;在行尾之后添加文本
> o下面打开新行; O打开新行上面
改变
> r替换单个字符; R替换多个字符
>更改单个字符
> cw change word; C改为行尾; cc更换整条线
> c< motion>改变运动方向上的文本
> ci(更改括号内(更多示例,请参见text object selection)
> x delete char
> dw delete word; D删除到行尾; dd删除整行
> d< motion>删除运动方向
剪切和粘贴
> yy copy line into paste buffer; dd切成糊状缓冲液
> p粘贴缓冲区下面的光标线; P粘贴缓冲区在光标线上方
> xp交换两个字符(x删除一个字符,然后p将其放回光标位置后面)
块
> v视觉块流; V视线块; ^ V视觉块列
>大多数运动命令将块扩展到新的光标位置
> o将光标移动到块的另一端
> d或x切块进入粘贴缓冲区
> y复制块到粘贴缓冲区
>>缩进块<非缩进块
> gv重新选择最后一个视觉块
全球
>:%s / foo / bar / g substitute所有出现的“foo”到“bar”
>%是一个range,表示文件中的每一行
> / g是一个标志,它改变一行上的所有出现,而不仅仅是第一个出现
> / search forward; ?向后搜索
> *向前搜索光标下的单词; #向后搜索光标下的字
> n下一个匹配在同一个方向; N下一个匹配在相反方向
> fx前进到下一个字符x; Fx后退到上一个字符x
>;在相同方向上再次移动到相同字符; ,再次向相反方向移动相同的字符
>:w将文件写入磁盘
>:w name将文件写入磁盘作为名称
> ZZ将文件写入磁盘并退出
>:编辑新文件; :n!编辑新文件而不保存当前更改
>:退出编辑文件; :q!退出编辑而不保存更改
>:e再次编辑相同的文件(如果更改外部vim)
>:e。目录浏览器
视窗
> ^ Wn新窗口
> ^ Wj下到下一个窗口; ^ Wk到上一个窗口
> ^ W_最大化当前窗口; ^ W =使所有窗口大小相等
> ^ W增加窗口大小; ^ W-减小窗口大小
源导航
>%跳转到匹配的括号/括号/括号,或语言模块加载语言模块
> gd go to cursor of local symbol under cursor; ^ O返回上一个位置
> ^]跳转到全局符号的定义(需要tags文件); ^ T返回到上一个位置(任意堆叠的位置维持)
> ^ N(在插入模式下)自动字完成
显示本地更改
Vim具有一些功能,可以方便地突出显示从源代码控制中的基本版本更改的行。我创建了一个小的vim脚本,使这很容易:http://github.com/ghewgill/vim-scmdiff