25

常用Vim命令及实用Vim按键映射配置详解(2019年最新)

 4 years ago
source link: https://vimjc.com/vim-commands-and-vim-mapping-conf.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Vim按键映射可用于设置Vim命令或命令串的别名,完成个性化Vim按键设置。

Vim命令虽然很多,但是常用的Vim命令却被使用者所熟知。通过 Vim 按键映射,可减少按键次数、提供Vim的工作效率。

本文介绍15种常用的Vim按键映射配置,并详细分析了对应的Vim命令及功能。更多个性化Vim配置,推荐阅读《 无插件Vim配置及Vim命令介绍 》。

1. 打开/关闭显示行号按键映射

通过以下的 Vim 按键映射,可以在 Vim 的普通模式下按 F2 快速打开(或关闭)显示行号。

nnoremap <F2> :set nu! nu?<CR>

还可以根据个人使用需用,设置以下类似的按键映射。

nnoremap <F3> :set list! list?<CR>
nnoremap <F4> :set wrap! wrap?<CR>
nnoremap <F6> :exec exists('syntax_on') ? 'syn off' : 'syn on'<CR>

2. 退出Vim的按键映射

退出Vim是最常用的操作, :q:w 等命令需要先按 : 键进入 Vim 命令行模式。Vim leader键 主要用于避免按键冲突,类似于命名空间的作用。

nnoremap <leader>q :q<CR>
nnoremap <leader>w :w<CR>

在上述按键映射的设置下,Vim 默认模式下,按 \q (因为默认的leader键是 \ )就等价于输入 :q 并按回车键执行,按 \w 等价于输入 :w 并按回车键执行之。

Rfqyyev.gif

3. Vim全选按键映射

可以通过Vim 可视化模式 实现全选 Vim 中的全部文本。具体来说,先通过 gg 命令跳转到文件的首行,再按 V 进入可视化模式的行选择模式,再通过 G 命令将光标移动到尾行,从而实现选中全部文本的效果。

假设 leader 键是默认的 \ ,通过下面的 Vim 按键映射,可以实现按 \sa 全选当前文件所有文本的效果。

map <leader>sa ggVG"

JjqqUba.gif

4. Vim 缩进及按键映射配置

Vim可视化模式 下, > 用于增加缩进;而 gv 命令可以用于重新选取上一次由可视模式所选择的文本范围。

为了避免丢失可视化模式下的选择本文,可增加如下 Vim 按键映射配置:

vnoremap < <gv      
vnoremap > >gv

5. Vim分割窗口切换映射

在 Vim 窗口分割模式下,默认可以使用 <Ctrl-w> 组合键进行窗口切换。例如, <Ctrl-w>j 可切换到下面的分割窗口, <Ctrl-w>k 可切换到上面的分割窗口, <Ctrl-w>h 可切换到左边的分割窗口,而 <Ctrl-w>l 可切换到右边的分割窗口。

但是,个人觉得上述按键太过繁琐,可以通过以下按键映射,减少按键次数。

map <C-j> <C-W>j                                                                                                                             
map <C-k> <C-W>k
map <C-h> <C-W>h
map <C-l> <C-W>l

在上述Vim按键映射设置下,通过组合键 <Ctrl-j> 可切换到下面的分割窗口, <Ctrl-k> 可切换到上面的分割窗口, <Ctrl-h> 可切换到左边的分割窗口,而 <Ctrl-l> 可切换到右边的分割窗口。

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 <C-j> <t_kd>
cnoremap <C-k> <t_ku>
cnoremap <C-a> <Home>
cnoremap <C-e> <End>

例如, cnoremap <C-a> <Home> 表示将 <Ctrl> a 组合键映射为 Home 键,从而实现在 Vim 命令行模式下按 <Ctrl> a 即可快速移动光标到行首的效果。

上述其他几个按键映射含义类似,在此不再赘述。

26ru6bJ.gif

9. Vim 复制命令

y ( yank 的缩写形式) 命令用于复制文本到Vim寄存器中,其命令格式为: ["x]y{motion} ,表示 复制 {motion} 跨越的文本 [到寄存器 x] (参考:Vim文本编辑命令汇总)。

如果希望复制 从光标到行尾 所在范围的文本,可使用 y$ 命令。

以下 Vim 按键映射,将大写的 Y 按键映射为 y$

map Y y$

10. Vim取消撤销操作

Vim 普通模式下,通过 u 可撤销上次的操作,而组合命令 <Ctrl r> 可取消撤销操作。为了减少按键操作,可将 U 键映射为 <Ctrl r> 命令,从而实现按 U 便可以 取消撤销 操作。

对应按键映射配置如下:

nnoremap U <C-r>

11. Vim 位置标记与跳转

如Vim位置标记mark详解一文所介绍,Vim命令 'a (单引号加一个标记a) 会将光标跳转到a标记所在行的 行首 。而 a 命令会将光标跳转到标记所在行上被标记的列位置,即同时恢复行、列的位置。

nnoremap ' `      
nnoremap ` '

12. Vim搜索结果居中展示

nnoremap <silent> n nzz
nnoremap <silent> N Nzz
nnoremap <silent> * *zz
nnoremap <silent> # #zz
nnoremap <silent> g* g*zz

Vim普通模式下, z 命令用于屏幕重绘。 z. 命令使当前光标所在的行显示在窗口中部,且光标会移动到当前行的第一个非空白字符上;而 zz 会使当前光标所在的行显示在窗口中部,且保持光标所在列的位置不变。同时,在 Vim 普通模式下, n 命令表示跳转到下一个查找匹配项。

因此, nzz 表示把下一个查找匹配项所在的行显示在屏幕的最中间。

为了减少按键次数,同时不改变使用习惯,可以设置 Vim 普通模式下的按键映射: nnoremap <silent> n nzz ,实现按 n 键就可以将下一个查找匹配项所在的行显示在屏幕的最中间。

上述其他几个按键映射同理,不再赘述。可参考《 Vim搜索命令使用方法和技巧 》一文,了解 N*# 、`` 在 Vim 查找匹配下的作用。

注: silien 命令用于安静地执行命令,既不显示正常的消息,也不会把它加进消息历史,其格式为: :sil[ent][!] {command} 。如果有 [!] ,则表示还将跳过错误消息 (即时检测到错误时,Vim 命令和按键映射也不会被终止)。

13. 取消 Vim 查找高亮显示

noremap <silent><leader>/ :nohls<CR>

如《 Vim清除上次的搜索高亮 》一文介绍,Vim 命令行模式下执行 nohls 可取消高亮显示查找匹配结果。

如果 leader 键是默认的 \ ,那么在上述的按键映射下,Vim 普通模式下执行 \/ 等价于在 Vim 命令行模式下 执行 nohls 命令,可用于取消搜索结果高亮显示。

14. 进入Vim命令行模式/返回Vim普通模式

普通模式下,输入 : 可进入 Vim 的命令行模式。

考虑到按键便利性,可将 ; 映射为 : ,从而实现按 ; 键便可以从 Vim 普通模式进入命令行模式的效果。对应配置如下:

nnoremap ; :

在任何模式下,按 Esc 可返回到 Vim 普通模式。

同样出于按键便利性,可以在 Vim 的插入模式下,将 kj 映射为 Esc 键,实现按 kj 键退出插入模式,返回到普通模式的效果。对应配置如下:

inoremap kj <Esc>

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 %
636F3qn.jpg!web

《女程序员说》

原创不易,希望能给小女子的公众号加个关注~


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK