Vim 简明教程
VIM 基础教程
前言
最难的不是如何学习 VIM,而是一直使用 VIM。
尽管网上有非常多的 VIM 教程,大多数教程要么是过于直白、要么是过于基础。从这篇文章中你可以学习到 VIM 的操作逻辑,使用 VIM 实现你现在使用的编辑器的编辑技巧。当然,最好的文档还是 VIM 的帮助文档,如果有耐心看的话,可以把它当成一个字典或者百科全书。
VIM 配置
这篇文章不会详细介绍 VIM 如何配置,但是有一些重要配置可以提高编辑体验,有必要介绍一下。安装好 VIM 之后,VIM 的配置文件位置:
vim ~/.vimrc
下面是一些推荐配置:
-
重映射 ESC 按键:ESC 用来退出编辑模式,但是位于键盘边缘,不太容易按。所以可以输入 jk 代替 ESC。
inoremap jk <ESC>
-
修改 Leader Key:
Leader Key 用来触发快捷键。默认的 Leader Key 是
\
,不太容易按。而'
就在小拇指右边。let mapleader = "'"
有了上面两个配置,手基本上不会离开键盘太远。
下面是一些特别推荐的配置:
syntax on # highlight syntax
set number # show line number
set noswapfile # disable the swapfile
set hlsearch # highlight the search
set ignorecase # ignore case in search
set incsearch # show search results as you type
-
重映射 CAPSLOCK:这不是 VIM 的配置,CAPSLOCK 可以说是键盘上最没用的按键,建议映射为 ESC 或者 Ctrl。这个映射可以在操作系统层面上实现。
-
插件管理:建议尽量保持原有的插件管理,不要使用第三方插件管理器。在 VIM 8.x 版本上,插件管理非常简单,只需要把插件复制到下面的文件夹即可:
~/.vim/pack/{插件文件夹名字,可以随意取}/start/{插件名字}
VIM 的语言
使用 VIM 的方式思考会大幅提高你的编辑效率。VIM 就像一门语言,包括名词、动词、形容词/副词。这些术语在 VIM 的技术实现上不是准确的,但是可以帮助理解 VIM 的操作逻辑。
动词
动词就是要采取的动作,可以作用于名字上。比如:
- d: delete,删除
- c: change,修改
- y: yank,复制
- v: visual,可视化选择(V 选择行,v 选择字符)
形容词/副词
这类词解释应该按什么方式完成动作。比如:
- i: inside,内部
- a: around,周围
- NUM: 数字
- t: 搜索目标,在目标前面停止
- f: 搜索目标,在目标上面停止
- /: 查找字符串(正则)
名词
名词就是要作用的对象,比如:
- w: word,单词
- s: sentence,句子
- ): sentence,另外一种方式
- p: paragraph,段落
- },paragraph,另外一种方式
- t,tag,标签(HTML或者XML)
- b: block,代码块
名字用作动词
名字也可以用作动词,可以用于以某个单位移动光标。
生成句子
组合动词、形容词/副词、名字可以生成一个合法的句子。比如:
删除两个单词
d2w
在句子内部修改(删除当前句子并且进入插入模式)
cis
复制所在的段落
yip
修改直到下一个尖括号(删除直到下一个尖括号,并且进入插入模式)
ct<
这里 to
的目标是 <
,实际上可以是任何元素,比如 yt.
, dt.
等等。
开始使用 VIM
VIM 编辑文件的基础操作:
- vim file: 使用 vim 打开 file
- :w: 保存修改
- :q!: 退出 vim,不保存修改
- :wq: 保存修改并退出
- :saveas ~/somepath: 在指定目录保存文件
- ZZ,等价于 :wq
在文本中搜索
字符串搜索
使用 /
可以进行搜索,输入想要搜索的内容然后按下回车。
搜索 include
/include
一旦搜索完毕,使用 n
跳转到下一个搜索结果,使用 N
跳转到上一个搜索结果。可以使用 ?
从反向查找字符串。
跳转到指定字符
跳转到下一个 < 上
f<
跳转到下一个 < 的前面
t<
修改直到下一个,
ct,
搜索总结
- /{string},搜索指定字符串
- t, 跳转到某个字符前
- f,跳转到某个字符上
- *****,搜索当前位置的单词
- n,字符串搜索中,跳转到下一个
- N,字符串搜索中,跳转到上一个
- ;,字符搜索中,跳转到下一个
- ,,字符搜索中,跳转到上一个
移动光标
- j,向下移动
- k,向上移动
- h,向左移动
- l,向右移动
需要多加练习,刚开始不是很习惯。
行内移动
- 0,移动到行首
- $,移动到行尾
- ^,移动到第一个非空白字符
- t",移动到下一个 " 前
- f",移动到下一个 " 上
以单词为单位移动
- w,移动一个单词
- b,向后一个一个单词
- e,移动到单词末尾
大写指令会忽略掉某些字符分隔符。
- W,移动一个单词,忽略分隔符
- B,前后移动一个单词,忽略分隔符
在段落间移动
- ),移动一个句子
- },移动一个段落
移动屏幕
- H,移动到屏幕顶端
- M,移动到屏幕中间
- L,移动到屏幕底部
- gg,移动到文件顶部
- G,移动到文件底部
- ^U,向上移动半个屏幕
- ^D,向下移动半个屏幕
- ^F,向上翻页
- ^B,向下翻页
来回跳转
- Ctrl+i,跳转到前一个位置
- Ctrl+o,跳转到后一个位置
其他动作
- :line_number,跳转到指定行
- ^E,向上滚动一行
- ^Y,向下滚动一行
修改文本
现在开始使用 VIM 进行编辑。
VIM 模式
- 正常模式:一开始就处于正常模式。正常模式又叫做命令模式,通常用来输入命令。
- 插入模式:修改文本的模式,有很多从正常模式切换到插入模式的方法。
- 可视化模式:选择文本的一种模式,与正常模式相似,只不过光标的移动会选中文本。可视化模式的目的是可以在选中的文本上执行命令,非常方便。
- 扩展模式:从底部输入
:
,可以执行很多功能强大的命令。
基础修改/插入选项
修改文本的方式有 修改(c), 插入(i),附加(a)。
- i,insert,在光标之前插入
- a,append,在光标之后插入
- I,在行首插入
- A,在行尾插入
- o,在下一行插入新行
- O,在上一行插入新行
- r,替换光标位置的字符
- R,替换光标位置的字符,但是保持继续输入状态
- cm,比如 cw,cs,cp
// TODO
挖坑,以后再填