常用Vim命令及实用Vim按键映射配置详解(2019年最新)
Vim按键映射可用于设置Vim命令或命令串的别名,完成个性化Vim按键设置。
Vim命令虽然很多,但是常用的Vim命令却被使用者所熟知。通过 Vim 按键映射,可减少按键次数、提供Vim的工作效率。
本文介绍15种常用的Vim按键映射配置,并详细分析了对应的Vim命令及功能。更多个性化Vim配置,推荐阅读《 无插件Vim配置及Vim命令介绍 》。
1. 打开/关闭显示行号按键映射
通过以下的 Vim 按键映射,可以在 Vim 的普通模式下按 F2 快速打开(或关闭)显示行号。
nnoremap :set nu! nu?
还可以根据个人使用需用,设置以下类似的按键映射。
nnoremap :set list! list? nnoremap :set wrap! wrap? nnoremap :exec exists('syntax_on') ? 'syn off' : 'syn on'
2. 退出Vim的按键映射
退出Vim是最常用的操作, :q
、 :w
等命令需要先按 :
键进入 Vim 命令行模式。Vim leader键 主要用于避免按键冲突,类似于命名空间的作用。
nnoremap q :q nnoremap w :w
在上述按键映射的设置下,Vim 默认模式下,按 \q
(因为默认的leader键是 \
)就等价于输入 :q
并按回车键执行,按 \w
等价于输入 :w
并按回车键执行之。
3. Vim全选按键映射
可以通过Vim 可视化模式 实现全选 Vim 中的全部文本。具体来说,先通过 gg
命令跳转到文件的首行,再按 V
进入可视化模式的行选择模式,再通过 G
命令将光标移动到尾行,从而实现选中全部文本的效果。
假设 leader 键是默认的 \
,通过下面的 Vim 按键映射,可以实现按 \sa
全选当前文件所有文本的效果。
map sa ggVG"
4. Vim 缩进及按键映射配置
Vim可视化模式 下, >
用于增加缩进;而 gv
命令可以用于重新选取上一次由可视模式所选择的文本范围。
为了避免丢失可视化模式下的选择本文,可增加如下 Vim 按键映射配置:
vnoremap < >gv
5. Vim分割窗口切换映射
在 Vim 窗口分割模式下,默认可以使用 组合键进行窗口切换。例如,
j
可切换到下面的分割窗口, k
可切换到上面的分割窗口, h
可切换到左边的分割窗口,而 l
可切换到右边的分割窗口。
但是,个人觉得上述按键太过繁琐,可以通过以下按键映射,减少按键次数。
map j map k map h map l
在上述Vim按键映射设置下,通过组合键 可切换到下面的分割窗口,
可切换到上面的分割窗口,
可切换到左边的分割窗口,而
可切换到右边的分割窗口。
6. Vim光标行移动
nnoremap k gk nnoremap gk k nnoremap j gj nnoremap gj j
nnoremap gk k
表示将 gk
按键映射 为 k
,从 Vim光标移动之实际行与屏幕行 一文可知, gk
表示上移一个屏幕行。
7. Vim行首、行尾光标移动按键映射
Vim 普通模式下, ^
命令可将光标移动到当前行的第一个非空字符; $
可将光标移动到当前行的行尾。
而 h
命令用于向左移动光标, l
命令用于向右移动光标。
所以,Vim教程网(https://vimjc.com)进行如下按键映射,实现按大写的 H
将光标 左移 至当前行的第一个字符,按大小的 L
将光标 右移 至当前行的最后一个字符。
nnoremap H ^ nnoremap L $
8. Vim 命令行模式光标移动
在 Vim 的命令行模式下,如果想实现类似于《 高效Linux技巧及Vim命令 》一文提到的快速移动光标到行首的效果,可配置如下 Vim 按键映射。
cnoremap cnoremap cnoremap cnoremap
例如, cnoremap
表示将 a
组合键映射为 Home 键,从而实现在 Vim 命令行模式下按 a
即可快速移动光标到行首的效果。
上述其他几个按键映射含义类似,在此不再赘述。
9. Vim 复制命令
y
( yank
的缩写形式) 命令用于复制文本到Vim寄存器中,其命令格式为: ["x]y{motion}
,表示 复制 {motion} 跨越的文本 [到寄存器 x] (参考:Vim文本编辑命令汇总)。
如果希望复制 从光标到行尾 所在范围的文本,可使用 y$
命令。
以下 Vim 按键映射,将大写的 Y
按键映射为 y$
。
map Y y$
10. Vim取消撤销操作
Vim 普通模式下,通过 u
可撤销上次的操作,而组合命令 可取消撤销操作。为了减少按键操作,可将
U
键映射为 命令,从而实现按
U
便可以 取消撤销 操作。
对应按键映射配置如下:
nnoremap U
11. Vim 位置标记与跳转
如Vim位置标记mark详解一文所介绍,Vim命令 'a
(单引号加一个标记a) 会将光标跳转到a标记所在行的 行首 。而 a
命令会将光标跳转到标记所在行上被标记的列位置,即同时恢复行、列的位置。
nnoremap ' ` nnoremap ` '
12. Vim搜索结果居中展示
nnoremap n nzz nnoremap N Nzz nnoremap * *zz nnoremap # #zz nnoremap g* g*zz
Vim普通模式下, z
命令用于屏幕重绘。 z.
命令使当前光标所在的行显示在窗口中部,且光标会移动到当前行的第一个非空白字符上;而 zz
会使当前光标所在的行显示在窗口中部,且保持光标所在列的位置不变。同时,在 Vim 普通模式下, n
命令表示跳转到下一个查找匹配项。
因此, nzz
表示把下一个查找匹配项所在的行显示在屏幕的最中间。
为了减少按键次数,同时不改变使用习惯,可以设置 Vim 普通模式下的按键映射: nnoremap n nzz
,实现按 n
键就可以将下一个查找匹配项所在的行显示在屏幕的最中间。
上述其他几个按键映射同理,不再赘述。可参考《 Vim搜索命令使用方法和技巧 》一文,了解 N
、 *
、 #
、“ 在 Vim 查找匹配下的作用。
注: silien
命令用于安静地执行命令,既不显示正常的消息,也不会把它加进消息历史,其格式为: :sil[ent][!] {command}
。如果有 [!]
,则表示还将跳过错误消息 (即时检测到错误时,Vim 命令和按键映射也不会被终止)。
13. 取消 Vim 查找高亮显示
noremap / :nohls
如《 Vim清除上次的搜索高亮 》一文介绍,Vim 命令行模式下执行 nohls
可取消高亮显示查找匹配结果。
如果 leader 键是默认的 \
,那么在上述的按键映射下,Vim 普通模式下执行 \/
等价于在 Vim 命令行模式下 执行 nohls
命令,可用于取消搜索结果高亮显示。
14. 进入Vim命令行模式/返回Vim普通模式
普通模式下,输入 :
可进入 Vim 的命令行模式。
考虑到按键便利性,可将 ;
映射为 :
,从而实现按 ;
键便可以从 Vim 普通模式进入命令行模式的效果。对应配置如下:
nnoremap ; :
在任何模式下,按 Esc
可返回到 Vim 普通模式。
同样出于按键便利性,可以在 Vim 的插入模式下,将 kj
映射为 Esc
键,实现按 kj
键退出插入模式,返回到普通模式的效果。对应配置如下:
inoremap kj
15. Vim 保存没权限修改的文件
:w!
命令可实现强制保存文件 (即便该文件是只读文件)。但这个命令无法保存那些没修改权限的文件,如果中途强制退出,又容易丢失辛辛苦苦修改的内容。这时候,Vim 下可执行 shell 终端命令的功能便派上了大用场。《 Vim超级用户权限保存文件 》一文已经介绍过通过 :write !sudo tee % > /dev/null
命令,可实现使用超级用户权限保存文件。
通过下面的 Vim 按键映射,可以使用 :w!!
上述同样的效果。(当然,需要输入当前 Linux 用户的密码)。更多Vim命令和Vim配置,欢迎访问Vim教程网( https://vimjc.com )。
cmap w!! w !sudo tee >/dev/null %
《女程序员说》
原创不易,希望能给小女子的公众号加个关注~