vim 大法好 - 命令指南

基本模式

  • 命令模式

进入vim后, 默认就是命令模式.

  • input模式

命令模式下, 输入i进入input模式, esc返回命令模式.

文本操作


文本选择

快捷键 说明
V selects entire lines
v selects range of text
ctrl+v 列选择
ctrl+v, :norm i# 列选择, 增加#注释
gv 重新选择上次选择的区块

选择 / 复制 / 粘贴 ...

快捷键 说明
v(V for lines) -> y (yank) 选择->复制
p 粘贴
v -> d (delete)
ctrl + shift + v paster from clipboard in input mode
ctrl + ; 弹出clipboard菜单, 选择一个粘贴 (input mode)

输入

快捷键 说明
u undo
ctrl + r redo
ctrl-p or ctrl-n 使用当前session中的pattern来自动完成
a 在光标后开始编辑
o 当前行后面插入一个新行
O 当前行前面插入一个新行
cw 选择一个词
ctrl-v + 大写I + 字符 + esc 列选择插入
v + gU (变大写)
v + gu gu (变小写)
ye 复制当前光标到单词结尾的部分

缩进

快捷键 说明
v or V 区块缩进前需要选择文本
5> 表示右缩进5个tab
4< 同理, 左向4个tab

:set expandtab ts=4 sw=4 ai

https://stackoverflow.com/questions/234564/tab-key-4-spaces-and-auto-indent-after-curly-braces-in-vim

浏览 / 移动

快捷键 说明
ctrl + e 向下滚屏,保持光标
ctrl + y 向上滚屏, 保持光标
ctrl + d 向下, 不保持光标
ctrl + u 向上, 不保持光标
0 或 ^ 跳至行头
$ 跳至行尾
G 移至档尾(最后一行的第一个非空白字元处)
gg 移至档首(第一行之第一个非空白字元处)
ctrl+f 下翻页
ctrl+b 上翻页
w 移至次一个字(word)字首。当然是指英文单字。
W 同上,但会忽略一些标点符号。
) 移至下一个句子(sentence)首。
( 移至上一个句子(sentence)首。
} 移至下一个段落(paragraph)首。
{ 移至上一个段落(paragraph)首。

查找 / 替换

快捷键 说明
/ + your-search-string 搜索, 可以使用正则, 注意转义
ggn
GN 最后一个
/ + ↑或↓ 搜索历史
:%s/源字符串/目的字符串/g 全局替换, %表示所有行
:4s/源字符串/目的字符串/g 替换从第4行
:1,4s/源字符串/目的字符串/g 替换从第1行到第4行

多窗口


快捷键 说明
:sp file_path(able to use tab) 新增窗口打开
:vsp file_path 新增窗口垂直打开
:sv 复制分割当前窗口
ctrl + w, s 复制分割当前窗口
ctrl + w, v 垂直, 复制分割当前窗口
ctrl w, Left/Down/Up/Right 按方向 切换窗口
ctrl w, w 循环 切换窗口
ctrl w, h/j/k/l 按方向 切换窗口
ctrl w, H/J/K/L 按方向 移动窗口
ctrl w , q 或 c 关闭窗口

常用命令

快捷键 说明
:sp file_path(able to use tab) 新增窗口打开
:set noautoindent
:set number
:set number! 切换
:set number& Set option to default value
:set number? Show value of option
... ...

更多请参看另一博客,将会记录常见的配置及相关命令。

执行shell命令

1.
:!command
如:

:!ls -al

执行一个命令, 但不退出vim.

2.
:r !command
将shell命令command的结果插入到当前行的下一行

这个命令比较常用, 比如输入当前目录:

:r !pwd

3.
:起始行号,结束行号 !command
将起始行号和结束行号指定的范围中的内容输入到shell命令command处理,并将处理结果替换起始行号和结束行号指定的范围中的内容

4.
:起始行号,结束行号 w !command
将起始行号和结束行号所指定的范围的内容作为命令command的输入。不会改变当前编辑的文件的内容

编辑root权限的文件

这个功能也经常用到, 比如编辑某个root的文件(readonly)时, 忘记了sudo, 当改了很多内容才发现, 怎么办呢 ?

:w !sudo tee %

若是sudo不能解决的, 先写到临时文件:

:w! ~/tempfile.ext

其他, 待续...

参考


[1] http://vimgifs.com/
[2] http://vimcasts.org/episodes/working-with-windows/
[3] http://blog.csdn.net/topgun_chenlingyun/article/details/8013115
[4] http://superuser.com/questions/694450/using-vim-to-force-edit-a-file-when-you-opened-without-permissions