Vim

一、常用操作

1.移动

以字(符)为单位

功能 按键
k
j
h
l

以单词为单位

功能 按键
前一个单词尾 ge
后一个单词首 w
本单词首(已在本词首则跳到前一单词首) b
本单词尾(已在本词尾则跳到后一单词尾) e

以屏幕为单位

功能 按键
向下翻页 CTRL-f
向上翻页 CTRL-b
向下翻半页 CTRL-d
向上翻半页 CTRL-u
向上一行 CTRL-y
向下一行 CTRL-e
光标移到屏幕上方 H
光标移到屏幕中间 M
光标移到屏幕下方 L
光标所在位置移到屏幕上方 zt
光标所在位置移到屏幕中间 zz
光标所在位置移到屏幕下方 zb

行号

功能 按键
跳到第 num 行 :numnumGnumgg

文件

功能 按键
跳到文件头 gg
跳到文件尾 G

2.编辑

复制

功能 按键
复制光标所在单词 yiw
复制光标所在行 yy

粘贴

功能 按键
在光标之后粘贴 p
在光标之前粘贴 P

剪切

功能 按键
剪切选中区域 d
剪切光标所在行 dd

替换

功能 按键
将全文中的 str1 替换为 str1 :%s/str1/str2/g
将 1 到 5 行中的 str1 替换为 str2 :1,5/str1/str2/g

大小写

功能 按键
将选中内容大小写互换 ~
将选中内容全转为小写 gu
将选中内容全转为大写 gU
将当前行变成小写 guu
将当前行变成大写 gUU

3.选择

功能 按键
选中上一次选择的区域 gv
选中括号内区域 vi{vi[vi(

搜索

功能 按键
向下查找字符串 /str
向上查找字符串 ?str
查找下一个 n
查找上一个 N
向下查找光标所在单词 *
向下查找光标所在单词 #

正则表达式

功能 按键
匹配单词左边界 \<
匹配单词右边界 \>
去重 :g/^\(.*\)$\n\1/d

常用

功能 按键
删除空行 :g/^$/d
撤销/UNDO u
重做/REDO C-r
统计行/单词/字符/字节数 g C-g

全局

功能 按键
退出 :q
强制执行 !
执行外部命令 :!

3.文件操作

功能 按键
打开 :e
打开文件对话框 :bro e
保存 :w
另存为对话框 :bro w
查看历史文件列表 :ol
查看并打开历史文件 :bro ol
重命名当前文件 :f filename

vimdiff

功能 按键
移动到上一个不同处 [c
移动到下一个不同处 ]c
该差异点使用当前文件的 dp
该差异点使用其它文件的 do
手动刷新重新比较 :diffupdate

Buffer

功能 按键
查看 Buffer 列表 :ls
转到 Buffer 列表中的下一个 Buffer :bn
转到 Buffer 列表中的上一个 Buffer :bp
转到 Buffer 列表中的 num 号 Buffer :bnum
你之前待过的一个 Buffer :b#
从 Buffer 列表中删除 num 号 Buffer :bdnum

4.组合命令

可以使用 | 来组合命令,比如 cmd1 | cmd2

代码

功能 按键
格式化代码 gg=G
去除 1-20 行首的行号 :1,20s/^\\s\*[0-9]\*\\s\*//g
展开全部折叠 zR
展开当前层级折叠 zr
全部折叠 zM
当前层级折叠 zm
切换折叠/展开 za
递归折叠/展开当前大区块 zA
折叠当前区块 zc
递归折叠当前大区块 zC
展开当前区块 zo
递归展开当前大区块 zO
格式化 json 数据 :%!python -m json.tool
缩进当前行 >>
反缩进当前行 <<

5.插件

CtrlP

基础按键 C-p

功能 按键
刷新列表 F5
切换文件/缓冲区/MRU C-f/b
切换全路径搜索/文件名搜索 C-d
切换正则表达式模式 C-r
上/下一个选项 C-k/j
在新标签/垂直分割/水平分割打开文件 C-t/v/x
历史选择记录的上/下一条 C-p/n
创建文件和它的父路径 C-y
标记并打开多个文件 C-z C-o
退出 CtrlP C-c

LeaderF

功能 按键
打开文件 Leader-f
打开缓冲区 Leader-b
打开 MRU Leader-m(自定义的)
退出 C-c
切换模糊查找和正则查找 C-r
粘贴 C-v
清空输入 C-u
上/下一个选项 C-k/j
在新标签/垂直分割/水平分割打开文件 C-t/]/v
刷新列表 F5

vim-table-mode

功能 按键
删除列 Leader-tdc
删除行 Leader-tdd
重新格式化表格 Leader-tr

二、高级应用:

1. vim 中执行 shell 命令

vim 中执行 shell 命令,有以下几种形式:

:!command

不退出 vim,并执行 shell 命令 command,将命令输出显示在 vim 的命令区域,不会改变当前编辑的文件的内容

例如

:!ls -l

特别的可以运行:!bash来启动一个 bash shell 并执行命令,不需要退出 vim

:r !command

将 shell 命令 command 的结果插入到当前行的下一行

例如

:r !date        #读取系统时间并插入到当前行的下一行。

:起始行号,结束行号 !command

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

例如

:62,72 !sort #将 62 行到 72 行的内容进行排序

可以只指定起始行,例如

:62 !tr [a-z] [A-Z]     #将62行的小写字母转为大写字母

当前光标所在行,除可以指定行号外,也可以用.表示,例如

:. !tr [a-z] [A-Z]      #将当前行的小写转为大写

:起始行号,结束行号 w !command

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

例如

:62,72 w !sort      #将62行到72行的内容进行排序,但排序的结果并不会直接输出到当前编辑的文件中,
                    #而是显示在 vim 敲命令的区域

特殊的可以下面这么用

:62 w !bash     #将会把第62行的内容作为 bash 命令来执行并显示结果,而且不会改变当前编辑的文件的内容

同样的:. w !bash,将当前行的内容作为 bash 命令来执行

例如52行内容为ls -l

那么输入:52 w !bash就跟执行!ls -l是一样的效果,如果你用的 shell 是 bash shell

如果输入的是:52 !bash,那么会把第52行的内容也就是ls -l作为命令执行,

同时命令的输出结果会替换第52行的内容,注意其中的区别。

2. vim copy 指定行之间的文本

#例:复制第5行 到 第10行 的内容到 第20行
:5,10 co 20

Search

    Table of Contents