Vim 新手速查清单
该 Cheatsheet 是我在通过 vimtutor 学习 Vim 以及日常使用中整理出来的,主要面向初学者。
移动
- 移动到行尾 $,移动到行首 0,移动到行首第一个字符处 ^
- 移动到段首 {,移动到段尾 }
- 移动到下一个词 w,移动到上一个词 b,移动到当前单词末尾前一个字符 e
- 移动到文档开头 gg,移动到文档末尾 G
- 移动光标到屏幕顶端 H,移动到屏幕中间M,移动到底部L
- 跳到第 n 行 ngg 或 nG 或使用命令
:n
- 移动到上次编辑文件的位置 双击 `
- control + f 向下移动一屏,control + b 向上移动一屏
- control + i 从当前位置前进,control + o 从当前位置后退
- 光标在
(
或[
或{
处时,使用 % 跳转匹配的)
或]
或}
编辑
- 在光标位置插入 i,行首插入 I
- 在光标下一个字符后插入 a(ea 在下一个单词末尾插入文字),行尾插入 A
- 在下一行插入新的一行 o,在前一行插入新的一行 O
- 替换光标后所在字符 r,R 进入替换模式,每一个输入的字符都会被删除并替换原有字符
- 删除一个字符 x,删除一个字符后进入插入模式 s
- 删除一个单词 dw,删除单词到末尾并进入插入模式 ce,删除整个单词并进入插入模式 cw
- 删除到行尾 d$ 或者 D,删除到行尾后进入插入模式 c$ 或者 C
- 删除一行 dd,删除后进入插入模式 cc 或 S
- 复制 y,复制一行 yy 或者 Y
- p 粘贴删除或者复制后的内容到光标下一个字符后,P 粘贴到光标前
- 交换光标后的两个字符 xp,交换两行 ddp
- 撤销 u,撤销整行 U,重做 control + r(撤销之前的撤销)
- >> 缩进所在行,按一次之后继续按 . 可以继续缩进
- << 反缩进所在行
- 合并两行 J
- . 在新的光标位置重复上一条操作
- 按下 q 开始录制模式,选择 a - z 为重复操作快捷键,之后开始录制;再次按下 q 结束录制,然后按下 @ + 之前选择的重复操作快捷键,重复录制的操作
命令模式
:h[elp] [command_name]
查看某个命令的帮助文档,比如:-
:h user-manual
查看帮助文档 -
:h keycodes
查看按键名称 -
:h insert-index
查看插入模式文档 -
:h normal-index
查看普通模式文档 -
:h visual-index
查看 visual 模式文档 -
:h ex-edit-index
查看命令模式文档
-
- 查看帮助文档时,双击或者使用快捷键 control + ] 跳转链接,也可以使用前进/后退 (control + i / o) 在文件或者链接间跳转,如果链接是文件则可以使用 g + f 快捷键
- 查看帮助文档时,按 control + d 获得命令提示,按 tab 进行命令补全
- 按 control + b 跳到命令开头,control + e 跳到命令末尾,按 control + w 删除光标前一个单词,control + u 重新输入命令
- / 向后匹配搜索,? 向前匹配搜索,n 匹配下一个,N 反向匹配下一个
-
:set ic
忽略大小写匹配,:set noic
关闭,仅单次搜索忽略大小写加\c
,比如/keyword\c
-
:set hls
搜索结果高亮,:set nohls
关闭,取消高亮直到下次搜索:noh
-
:set is
部分结果匹配显示,:set nois
关闭 -
:s/old/new/g
+ 回车,替换光标所在行匹配到的所有字符 -
:#,#s/old/new/gc
替换所选行#,#
中匹配到的字符 -
:%s/old/new/g
替换当前文件中所有匹配到的字符,:%s/old/new/gc
每个替换前弹出确认提示 -
:!
执行 Shell 命令,比如:!ls
-
:w fileName
保存文件;:x
保存并退出,快捷键 ZZ,:q!
不保存文件直接退出,快捷键 ZQ -
:e
重新加载当前文件;:e!
不保存文件重新打开 -
:e fileName
在当前窗口打开(新)文件,使用:e#
切换到最近的文件,快捷键 control + ^,切换前必须先保存。 -
:r
,retrieve 数据并插入到光标所在下一行,数据来源可以是文件或命令结果,比如:r fileName
或者:r !ls
-
:ls
列出所有打开的文件,:b n
切换到指定数字下的文件,:bw
关闭当前文件,:qall
关闭所有文件,:wall
保存所有打开的文件 -
:his
查看所有命令历史,:his /
查看所有搜索历史 -
:set
更改当前 vim 配置,比如:set nu
显示行号 -
:map key1 key2
映射键盘按键,默认的<leader>
键为\
-
q:
查看最近命令历史,q/
查看最近搜索历史,按两次 control + c 退出 - 按 v 进入 Visual selection 模式,使用方向键进行移动,之后可以对选中的文本进行操作,比如复制 y,删除 d,重选 gv,将选中的行保存为文件
:w fileName
等 - 按 V 进入 Visual Line selection 模式
- 按 control + v 进入 Visual Block selection 模式,可以垂直方向块状选择,使用 I 插入模式,退出后所有选中的行都会插入相同内容。
-
:f
显示文档信息和当前所在位置,或者使用快捷键 control + g
多窗口
-
vim -o file1 file2
,水平方向多窗口打开多个文件,-O
垂直方向多窗口打开多个文件 -
:split fileName
在打开的文件中打开水平多窗口,快捷键 contorl + w, s,不加 fileName 则默认使用当前文件 -
:vsplit fileName
在打开的文件中打开垂直多窗口,快捷键 contorl + w, v,不加 fileName 则默认使用当前文件 - contorl + w, h j k l 或方向键,上下左右切换窗口,连按两次 contorl + w 切换下一个窗口,也可以使用光标对窗口进行选择
- control + w + shift + -,窗口垂直最大化;control + w + =,垂直方向等分显示。
-
:close
关闭当前窗口,快捷键 contorl + w, c 或者 shift + 双击 z -
:only
关闭其它窗口,快捷键 contorl + w, o
其它 Tips
-
:set textwidth=<n>
设置字符换行最大长度,之后按 gql 就可以将使得当前行超出部分自动换行 -
:retab
格式化 Tab 为空格,使得当前文件符合.vimrc
中的tabstop
等配置
iTerm 快捷键
- command + / 高亮当前文件中光标所在的位置
- command + ; 获得代码提示
Vim 插件
插件管理器:Vim-Plug
Core
- editorconfig-vim: EditorConfig plugin for Vim.
:h editorconfig
- vim-commentary: Comment stuff out.
gcc
,:h commentary
- auto-pairs: Insert or delete brackets, parens, quotes in pair.
:h autopairs
- vim-surround: change -
cs'"
|delete:ds'
|add -ysiw"
.:h surround
- vim-visual-multi: Multiple cursors plugin.
<C-Down>
/<C-Up>
,:h visual-multi
- nerdtree: A tree explorer plugin for vim.
:h nerdtree
- vim-gitgutter: A Vim plugin which shows git diff markers in the sign column.
:h gitgutter
- lightline.vim: A light and configurable statusline/tabline plugin for Vim.
:h lightline
- rainbow: Rainbow Parentheses.
:h rainbow
- vim-man: View man pages in vim.
:Man Command
,:h man
Others
- ack.vim: Run
ack
in Vim.:h ack
- nerdcommenter: Vim plugin for intensely nerdy commenting powers.
\cc
,:h nerdcommenter
- fzf.vim: Vim plugin for fzf.
:h fzf-vim
- vim-colors-solarized: Change colorscheme for Vim.
:h solarized
- vim-fugitive: Use git in Vim.
:h fugitive
- vimwiki: A personal wiki for Vim.
:h vimwiki
- YouCompleteMe: A code-completion engine for Vim.
:h youcompleteme
Vim 配置
用户目录下新建文件 .vimrc
,然后加入以下配置:
1 |
|
在 Vim 中查看 vimrc 示例文件 :e $VIMRUNTIME/vimrc_example.vim
,更多配置见 :h vimrc-intro
。
键盘映射
我们可以通过键盘映射给一些常用的命令添加快捷操作。
键盘映射的基本语法是:
1 |
|
我们知道 Vim 有不同的编辑模式 (normal/insert/replace/visual/select/command-line/operator-pending),我们可以根据不同的模式设定键盘映射的范围。比如,将插入模式下输入的 jk
映射为 <Esc>
键:
1 |
|
映射默认是 recursive 的,意思是如果有两个相互映射的按键,它们会相互循环映射彼此。比如 x 映射成 y,y 映射成 x,这样,当你输入 x 的时候,y 也会被输入,之后 x 会被输入,这样就会循环输入下去。好处是可以执行一些需要递归执行的任务。
如果你不需要递归映射,可以使用 non-recursive 的映射模式,用 nore
表示。比如 normal 模式下的非递归映射:
1 |
|
帮助命令
1 |
|