VIM快捷键

  • 一般模式(主要是光标的移动以及剪切粘贴)
    光标移动

    h(左方向键)/l(右方向键/空格) 光标向左/右移动一个字符
    k(上方向键)/j(下方向键/回车) 光标向上/下移动一行
    ctrl+f(pageup)/ctrl+b(pagedown) 光标下/上移动一屏
    gg/G 首行/尾行
    nG/nj 移动到第n行/移动到第n+1行
    数字0或者shift+6 本行行首(数字0将包含空格等特殊字符,shift+6为非空字符)
    shift+4 本行行尾
    ctrl+d/ctrl+u 向前/向后移动半屏
    +/- 向下/向上移动一行(非空)
    H/M/L 当前屏的顶/中/尾部

    剪切/粘贴

    [n]x/X 向后/前剪切一(n)个字符
    [n]dd 剪切光标所在行(向下n行)
    [n]yy 复制光标所在行[向下n行)
    d1G/y1G 剪切/复制光标所在行到第一行的所有数据
    dG/yG 剪切/复制光标所在行到末行的所有数据
    p/P 光标所在行向下/上粘贴
    j 将光标所在行于下一行合并成一行
    u/ctrl+r 撤销/重做(最多50步)
    v visual 进入可视化的选择模式
  • 编辑模式(主要是文本的编辑)
    i/I 当前字符/当前行首开启插入模式
    a/A 当前字符后/当前行尾开启插入模式
    o/O 当前行下一行/上一行开始开启插入模式
    r/R 替换当前所在字符一次/一直替换直到按下ESC为止
  • 命令模式(主要是一些配置如行号高亮等以及查找替换)
    :set nu/nonu/nohl/hl 显示/隐藏 行号/高亮
    :w/:w! 保存/强制保存(只读模式)
    :q/:q! 退出/强制退出
    :wq/:wq!/:x 保存并/强制保存并退出(会更新文件修改时间) :x也是写入文件并退出,但是文件修改了才会更新文件修改时间
    [n1,n2] :w filename [将n1-n2的内容另存为filename
    :e! 还原至打开时的状态
    :r filename 在当前光标所在行下面读入filename的内容
    :! command 暂离,并运行命令command,回车符返回vim
    /keywords 从顶开始搜索(n向下查找,N向上查找),光标定位在顶部第一个
    ? keywords 从尾部开始搜索(n向上查找,N向下查找),光标定位在尾部最后一个
    :1,$s/<searched>/<new>/[mode] 从第一行到文件结尾搜索keywords并替换为new,最后添加g表示全部替换,否则一行多个匹配只替换第一个。如果查找或者替换的部分有“/”出现,必须使用”\”转义。或者将“/”分隔符用其他字符,如:”#”
    ZZ 无改动-不保存你离开,改动则保持退出

    VIM选中多行快速批量缩进方法

    在vim的命令模式按ctrl+v,进入VISUAL BLOCK模式,然后向下移动光标,选中要缩进的行,再按shift+i,进入INSERT模式,敲4个空格,最后按esc键,被选中的相应行自动都缩进4个空格了。
    vim设置选项(系统/etc/vimrc或用户$HOME/.vimrc)选项: http://www.apelearn.com/bbs/thread-5483-1-1.html
    vim快速删除指定的一段字符da { http://www.apelearn.com/bbs/thread-842-1-2.html

更多如下:
一. 移动:
h,j,k,l: 左,下,上,右。
w: 下一个词的词首。
e:下一个词的词尾。
b:上一个词的词首。
<>: v 模式选中后进行缩进。

二. 跳转:
%: 可以匹配{},””,(),[]之间跳转。
H、M、L:直接跳转到当前屏幕的顶部、中部、底部。
#H:跳转到当前屏的第#行。
#L:跳转到当前屏的倒数第#行。
zt: 当前编辑行置为屏顶。
zz: 当前编辑行置为屏中。
zb: 当前编辑行置为屏底。
G:直接跳转到文件的底部。
gg: 跳转到文件首。
():跳转到当前的行首、行尾。
{}:向上、向下跳转到最近的空行。
[{:跳转到目前区块开头。
]}:跳转到目前区块结尾。
0: 跳转到行首。
$: 跳转到行尾。
2$: 跳转到下一行的行尾。
#:跳转到该行的第#个位置。
#G: 15G,跳转到15行。
:#:跳转到#行。
f’n’:跳转到下一个”n”字母后。
ctrl+b: 向后翻一页。
ctrl+f:向前翻一页。
ctrl+u: 向后翻半页。
ctrl+d: 向前翻半页。
ctry+e: 下滚一行。

三. 选择:
1.V: 选择一行。
2.^V: 矩形选择。
3.v3w: 选择三个字符。
四. 编辑:
1. 新增:
i: 光标前插入。
I: 在当前行首插入。
a: 光标后插入。
A: 当前行尾插入。
O: 在当前行之前插入新行。
o: 在当前行之后插入新行。
2. 修改 c(change) 为主:
r: 替换光标所在处的字符。
R:替换光标所到之处的字符。
cw: 更改光标所在处的字到字尾处。
c#w: c3w 修改3个字符。
C:修改到行尾。
ci’:修改配对标点符号中的文本内容。
di’:删除配对标点符号中的文本内容。
yi’:复制配对标点符号中的文本内容。
vi’:选中配对标点符号中的文本内容。
s:替换当前一个光标所处字符。
#S:删除 # 行,并以新文本代替。
3. 删除 d(delete) 为主:
D:删除到行尾。
X: 每按一次,删除光标所在位置的前面一个字符。
x: 每按一次,删除光标所在位置的后面一个字符。
#x: 删除光标所在位置后面6个字符。
d^: 删至行首。
d$: 删至行尾。
dd:(剪切)删除光标所在行。
dw: 删除一个单词/光标之后的单词剩余部分。
d4w: 删除4个word。
#dd: 从光标所在行开始删除#行。
daB: 删除{}及其内的内容。
diB: 删除{}中的内容。
n1,n2 d:将n1,n2行之间的内容删除。
4. 查找:
/: 输入关键字,发现不是要找的,直接在按n,向后查找直到找到为止。
?: 输入关键字,发现不是要找的,直接在按n,向前查找直到找到为止。
*: 在当前页向后查找同一字。
#: 在当前页向前查找同一字。
5. 复制 y(yank)为主:
yw: 将光标所在之处到字尾的字符复制到缓冲区中。
#yw: 复制#个字到缓冲区。
Y:相当于yy, 复制整行。
#yy:表示复制从光标所在的该行往下数#行文字。
p: 粘贴。所有与y相关的操作必用p来结合粘贴。
n1,n2 co n3:复制第n1行到第n2行之间的内容到第n3行后面。
6. 大小写转换:
gUU: 将当前行的字母改为大写。
guu: 将当前行的字母改为小写。
gUw: 将当前光标下的单词改为大写。
guw: 将当前光标下的单词改为小写。
a. 整篇大写:
ggguG
gg: 光标到文件第一个字符。
gu: 把选择范围全部小写。
G: 到文件结束。
b. 整篇小写:gggUG
7. 其它:
J:当前行和下一行合并成一行。
8. 移动:
n1,n2 m n3:将n1行到n2行之间的内容移至n3行下。

五.退出:
1. w filename: 保存正在编辑的文件filename
2. wq filename: 保存后退出正在编辑的文件filename
3. q:退出不保存。

六.窗口操作:
1. ctrl+w p: 在两个分割窗口之间来回切换。
2. ctrl+w j: 跳到下面的分割窗
3. ctrl+w h: 跳到左边的分割窗。
4. ctrl+w k: 跳到上面的分割窗。
5. ctrl+w l: 跳到右边的分割窗。

vim复制黏贴总是会第一句少一些,正确插入方法:set paste,然后i。

七:命令行(cmd)
其中我最常用的就是filename-modifiers, 这对于不退出vim直接开发一个项目非常有用。具体指令请参考:http://vimdoc.sourceforge.net/htmldoc/cmdline.html#filename-modifiers