1. 移动光标
- h 左移
- j 下移
- k 上移
- l 右移
- $ 移动到当前行行尾
- ^ 移动到当前行的第一个非空白字符上
- 0 移动到当前行的行首,同Home键
- gg 移动到文档的第一行
- G 移动到文档的最后一行
- H 移动到当前屏幕中的第一行
- M 移动到当前屏幕中的中间行
- L 移动到当前屏幕中的最后一行
- 行数+G 将光标移动到文档的指定行,比如移动到23行(23G)
- 数字+% 将光标移动到文档百分比位置,比如移动到文档12%的位置(12%)
- `. 跳转至上次编辑位置
- { 跳到上一个代码块
- } 跳到下一个代码块
- % 跳到与当前括号匹配的括号处,如当前在’{‘,则跳转到与之匹配的’}’处
- Ctrl+g 获取当前位置信息
- zz, zt, zb 滚动文档,将光标所在行居中/置顶/置尾
- f[x] 向右移动至字母x在当前行内下一次出现的位置,f指forward,x可以是任一个字母,你还可以用;来重复执行刚才的fx
- tx 同fx,区别在于光标会停留到x的左侧
- Fx 同fx,只是向左移动
- m
a
和’a
标记一个位置,在同页面快速定位到该标志。m表示mark,a是一个字母,’是单引号,后面跟上前面标记的字母 - gd 查看方法的调用
2. 内容搜索
- /string 向前搜索指定字符串
- ?string 向后搜索指定字符串
/\<make\>
搜索make,前后不包含其他字母*
查找光标所在处的单词,向下查找#
查找光标所在处的单词,向上查找
n/N配合以上查找命令执行- n 搜索指定字符串的下一个出现位置
- N 搜索指定字符串的上一个出现位置
3. 查找替换
- :%s/old/new/g 全文替换指定字符串
- :s/vivian/sky/ 替换当前行第一个vivian 为sky
- :s/vivian/sky/g 替换当前行所有vivian 为sky
- :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个vivian为sky, n为数字,若n为.,表示从当前行开始到最后一行
- :2,$s/vivian/sky/g 替换第 2 行开始到最后一行中每一行所有vivian为sky
- :%s/vivian/sky/ (等同于 :g/vivian/s//sky/) 替换每一行的第一个vivian 为sky
- :%s/vivian/sky/g (等同于 :g/vivian/s//sky/g) 替换每一行中所有vivian 为sky
(<w+>)_s*1
查找重复的连续单词,如:this this,输入/\(\<\w\+\>\)\_s*\1
4. 内容编辑
- u 撤销(undo)
- ctrl+r 重做(redo)
- r[x] 替换一个字符,将当前字符替换为x
- J 将下一行和当前行连接为一行
- x 删除当前字符(此处删除是剪切)
- X 删除前一个字符
- v 进入选择模式
- V 进入行选择模式
- d 删除选定内容
- dd 删除光标所在行
- dw 删除当前光标之后的一个词(word)
- db 删除当前光标之前的一个词(word)
- D 删除到行末(包含当前光标位置)
- cc 删除当前行并进入编辑模式
- cw 删除当前词(word),并进入编辑模式
- c$ 删除从当前位置至行末的内容,并进入编辑模式
- s 删除当前字符并进入编辑模式
- S 删除光标所在行并进入编辑模式
- y 复制当前选中内容
- yy 复制一行,此命令前可跟数字,标识复制多行,如6yy,表示从当前行开始复制6行
- yw 复制一个词(word)
- y$ 复制到行末
- P 粘贴粘贴板的内容到当前行的上面
- p 粘贴粘贴板的内容到当前行的下面
- dd+p 下移一行
- dd+shit+p 上移一行
- . 重复上一个编辑命令
- ~ 切换大小写,当前字符
- g~iw 切换当前字的大小写
- gUiw 将当前字变成大写
- guiw 将当前字变成小写
- guu/Vu 把一行全部变成小写
- gUU/VU 把一行全部变成大写
>>
将当前行右移一个单位<<
将当前行左移一个单位(一个tab符)- == 自动缩进当前行
- ctrl+a/x 若当前光标所在word是数字,可递增/递减该数字
- ctrl+d/t insert模式下,缩进/反缩进当前行
- ctrl+w insert模式下,向后删除一个word
- ctrl+y insert模式下,复制上一行同列字符
- ctrl+n/p insert模式下,代码提示下拉框
5. 插入模式
- i 从当前光标处进入插入模式,重复行插入,如3i,ESC后重复3行
- I 进入插入模式,并置光标于行首
- a 追加模式,置光标于当前光标之后
- A 追加模式,置光标于行末
- o 在当前行之下新加一行,并进入插入模式
- O 在当前行之上新加一行,并进入插入模式
- Esc 退出插入模式
:%s/^/a
当前文件的所有行首插入字符”a”,指定修改哪几行:2,8 s/^/a
:%s/$/a
当前文件的所有行尾追加字符”a”
6. 可视模式
- v 进入可视模式,单字符模式
- V 进入可视模式,行模式
- ctrl+v 进入列编辑模式,编辑完一行,ESC后其他行生效,插入是I和A,替换是r
- o 跳转光标到选中块的另一个端点
- U 将选中块中的内容转成大写
- O 跳转光标到块的另一个端点
以下如果将i换成a,则会将符号也包含进去
- viw 选中一个word
- vib 选中()括号中的所有内容
- viB 选中{}括号中的所有内容
- vi’ 选中’单引号中的内容
- vi” 选中”双引号中的内容
vi< 选中<尖括号中的内容
ctrl+r 在插入模式下按ctrl+r,然后输入=,再输入运算式,按Enter键,就会将结果插入当前位置
- :ab [缩写] [要替换的内容] 回车后,之后输入的缩写都会实时的替换
- :%!xxd 转为16进制模式,:%!xxd -r 恢复
- ggVGg? 进行ROT13编码
- ctrl+o/i 跳到之前、之后的修改位置
7. 标记块操作
>
块右移<
块左移- y 复制块
- d 删除块
- ~ 切换块中内容的大小写
8. 保存与退出
- :w 将缓冲区写入文件,即保存修改
- :wq 保存修改并退出
- :x/ZZ 保存修改并退出
- :q 退出,如果对缓冲区进行过修改,则会提示
- :q!/ZQ 强制退出,放弃修改
- :w !sudo tee % 忘记以root身份修改了只有root可写的文件
9. 高级移动
- ctrl-f 上翻一页
- ctrl-b 下翻一页
- ctrl-u 上翻半页
- ctrl-d 下翻半页
- ctrl-e 上滚一行,光标行数不变
- ctrl-y 下滚一行,光标行数不变
- set sub 两个分屏中的文件同步滚动
- set sub! 取消文件同步滚动。注:set scb 是set scrollbind 的简写。
- w 跳到下一个字首,按标点,空格或单词分割,比如:”.”、”,”或者”)”
- W 跳到下一个字首,长跳,以空白为分界的word成为WORD
- e 跳到下一个字尾,先跳到当前字尾
- E 跳到下一个字尾,长跳
- ge 跳到上一个字尾
- b 跳到上一个字首
- B 跳到上一个字,长跳
- fx 在当前行中找x字符,找到了就跳转至
- ; 重复上一个f命令,而不用重复的输入fx
- tx 与fx类似,但是只是跳转到x的前一个字符处
- Fx 跟fx的方向相反
- ),( 跳转到上/下一个语句
- 书签
- ma 把当前位置存成标签a
- `a 跳转到标签a处
10. 窗口操作
- :split/sp 水平分割一个窗口
- :vsplit/svp 垂直分割一个窗口
- :close 关闭一个窗口
- ctrl+w 2次,切换窗口,ctrl+w+h/j/k/l到左/下/上/右边窗口,大写则是移动窗口位置
- ctrl+w s/v 水平/垂直分割当前窗口,打开当前文件
- ctrl+w c 关闭当前窗口
- ctrl+w q 关闭当前窗口,如果是最后一个,则退出vim
- ctrl+w </>/+/-/= 调节窗口的宽度,高度,恢复均等
- :He He! 在下面/上面分屏浏览目录
- :Ve Ve! 在左边/右边分屏浏览目录
- :Te 打开一个标签,浏览目录
- gt/gT 切换到下一个/上一个标签
- :tabs 查看打开的标签
- :q 退出当前标签
- :ctrl+f 查看历史命令
11. 其他
- :set fileformat=unix 去掉因编码问题出现的
^M
,或者fileformats,简写为ff和ffs - :set ff=win 让linux下的Vim按照Windows格式来解析文件。
- set ffs=mac,unix,dos 添加到配置文件来告诉Vim按照怎样的顺序来尝试适配编码
- :set fileencoding 可以显示文件的编码格式,简写形式是:set fenc
- :set fenc=utf-8 可以转换文件的编码格式为utf-8
- :set encoding 可以显示编辑器当前使用什么编码方案来展示文档,简写为enc
- :set enc=utf-8 可以将vim使用的编码方案切换的utf-8
- :set nu/nonu 显示/取消 行号
- :set mouse=n/ 启用/取消 鼠标操作光标
- :sh 或 ctrl+z/:sh 进入shell命令行,vim后台运行
- fg 或 exit 从shell命令行返回到vim
- ga/g8 查看光标处的ascii码/utf-8码
12. 常用插件
- NERDTree 打开树形目录
- vim-scripts/taglist.vim 打开函数列表 :TlistToggle,需要安装ctags(apt-get install ctags)
- kien/ctrlp.vim 款速查找文件 ctrl+p, ctrl+j/k 上下选择
- Shougo/neocomplcache 自动补全
- matchit.zip 使%不仅能匹配括号,还能匹配html tags
- fencview.vim 自动检测文件编码和手动选择文件编码格式 :FencAutoDectect :FencView