Vim 3 vimrc[通俗易懂]

Vim 3 vimrc[通俗易懂]文章目录什么是vimrc基本修改UI相关配置编码相关配置文件相关配置编辑器相关配置按键映射“键我的vimrc小结什么是vimrcvimrc是Vim的配置文件,Vim在启动时会加载vimrc文件,你能想到的几乎所有的配置(包括主题,快捷键,插件设置等等),都可以配置在vimrc中,所以,vimrc在Vim使用过程中有着至关重要的地位.Vim是极…

大家好,又见面了,我是你们的朋友全栈君。

什么是 vimrc

vimrc 是 Vim 的配置文件, Vim 在启动时会加载 vimrc 文件, 你能想到的几乎所有的配置(包括主题, 快捷键, 插件设置等等), 都可以配置在 vimrc 中, 所以, vimrc 在 Vim 使用过程中有着至关重要的地位. Vim 是极其依赖 vimrc 配置的, 没有经过配置的 Vim 又丑又难用, 但是你如果懂得怎么配置, 就可以把 Vim 变成你想要的样子.

这里要明确一个概念: vimrc 中的大多数配置都是 Vim 命令模式下支持的命令, 都可以在命令模式下使用, 但是在命令模式中使用时, 只针对当前打开的 Vim 实例有效, 关闭了 Vim 之后再次打开, 之前在命令模式下的设置就无效了. 而配置到 vimrc 中, 每次 Vim 启动时都会自动读取并执行, 所以可以自动生效.

那么 vimrc 文件在哪呢? 打开 Vim, 使用 :version命令, 即可查看 Vim 的版本信息, 其中就包括了 vimrc 文件的位置. 我的电脑是 Windows, 可以看到类似如下输出:

VIM - Vi IMproved 8.1 (2018 May 18, compiled May 18 2018 18:36:07)
MS-Windows 32 位图形界面版本 带 OLE 支持
包含补丁: 1
...
     系统 vimrc 文件: "$VIM\vimrc"
     用户 vimrc 文件: "$HOME\_vimrc"
 第二用户 vimrc 文件: "$HOME\vimfiles\vimrc"
 第三用户 vimrc 文件: "$VIM\_vimrc"
      用户 exrc 文件: "$HOME\_exrc"
  第二用户 exrc 文件: "$VIM\_exrc"
    系统 gvimrc 文件: "$VIM\gvimrc"
    用户 gvimrc 文件: "$HOME\_gvimrc"
第二用户 gvimrc 文件: "$HOME\vimfiles\gvimrc"
第三用户 gvimrc 文件: "$VIM\_gvimrc"
       defaults file: "$VIMRUNTIME\defaults.vim"
        系统菜单文件: "$VIMRUNTIME\menu.vim"

通过上述信息可知, vimrc 文件的位置其实非常多, 加载顺序是自上而下, 找到第一个则使用第一个, 后续的不再使用, 如果第一个找不到, 则会依次向下寻找, 直到找到为止.

这里有一个问题, $VIM$HOME 指的是什么? 这两个变量的值可以使用如下命令查看:

:echo $VIM
:echo $HOME

$VIM 是 Vim 安装目录, $VIM 可写为 $vim, 不区分大小写, $HOME 是用户目录, $HOME 区分大小写.

Windows 版的 Vim 在安装时, 会自动在安装目录下生成一个 _vimrc 文件, 也就是 $VIM/_vimrc, 即 “第三用户 vimrc 文件”, 其他 vimrc 文件都是不存在的, 所以一般来说修改 $VIM/_vimrc 文件即可.

Linux 和 Mac 的查看及寻找方式也是一样的, 同样是使用 :version 命令, 这里不再赘述.

接下来我们就可以修改 vimrc 文件了. 在这之前请切记: 不要把任何你不理解的配置放到你的vimrc中, 你可以在网上找到成吨的 vimrc 配置文件, 但那都是别人的, 如果你不理解他们的配置, 一切照搬过来, 那结果是很糟糕的.

PS. 我后续的演示及配置都是基于 Windows 的. 另外, 在修改 vimrc 之前, 请先自己备份一个, 确保改坏了还能恢复回来.

基本修改

首先第一条要修改的就是: 关闭兼容模式. Vim 默认是以兼容 Vi 的模式运行的(Vi 是远古时期的 Vim), 在这种模式下, 很多 Vim 的高级特性都无法使用, 所以首先就要关闭兼容模式, 请把这条配置放在你 vimrc 文件的第一行:

set nocompatible " 关闭兼容模式

vimrc 中, " 号后面的内容为注释.

修改并保存之后要使之生效, 需要重启 Vim. 还有个更简单的方法, 就是在命令模式下输入 下面两个命令中的任意一个:

:source $vim/_vimrc
:source %

大部分情况下, 执行完上面的命令后, vimrc 的修改会立即生效, 但是有些特殊配置执行完这两个命令后不能及时生效, 这时就只能重启 Vim 了. 另外, :source 命令可简写为 :so

UI 相关配置

如果你觉得默认字体不好看, 可以使用如下配置修改字体:

set guifont=Consolas:h14

这表示使用 Consolas 字体, 字号为 14.

另外, 对于一个成熟的 vimer 来说, 界面上那些菜单, 工具栏什么的都是没啥用的, 可以关掉.

" 关闭工具栏
set guioptions-=T
" 关闭菜单
set guioptions-=m
" 关闭左侧滚动条
set guioptions-=L
" 关闭右侧滚动条
set guioptions-=r
" 启动时最大化
autocmd GUIEnter * simalt ~x

注意: vimrc 中, 赋值配置的 = 右边最好不要有空格, 有些值加了空格无法识别.

编码相关配置

Vim 的编码系统比较混沌, 几乎说不清楚, 总之你按照下面的配置方式就没问题了:

" 设置vim内部编码
set encoding=utf-8
" 设置编辑文件时的编码
set fileencoding=utf-8
" 设置 Vim 能识别的编码
set fileencodings=ucs-bom,utf-8,cp936,gb18030,gb2312,big5,cuc-jp,cuc-kr,latin
" 设置终端模式(非 GUI 模式)下的编码
set termencoding=utf-8
" 防止特殊符号无法显示
set ambiwidth=double
" 解决 console 输出乱码
language messages zh_CN.utf-8

文件相关配置

默认情况下, Vim 在运行期间会生成临时文件和备份文件, 以及修改历史文件(undo文件), 这些文件用处不大, 都是可以关掉的.

" 文件被外部改动后, 自动加载
set autoread
" 不生成备份文件
set nobackup
" 不生成临时文件
set noswapfile
" 不生成 undo 文件
set noundofile

还有个很重要的设置: 打开文件类型检测. 这个设置几乎是必须打开的.

" 自动检测文件类型, 并根据文件类型显示代码高亮, 设置缩进格式, 加载对应插件
filetype plugin indent on
" 相当于下面三行
" filetype on        " 根据文件后缀以及文件内容检测文件类型
" filetype indent on " 根据文件类型设置相应的缩进格式
" filetype plugin on " 根据文件类型加载相应的插件

编辑器相关配置

下面的配置是大都是和编辑相关的:

" 显示行号
set number
" 显示语法高亮
syntax enable
syntax on
" 显示 tab(>---), 空格(^), 换行(¬)
set list
set listchars=tab:>-,trail:^ ",eol:¬
" 突出显示当前行
set cursorline
" 开启自动缩进
set autoindent
" 智能缩进
set smartindent
" 编辑时按一个 Tab 键相当于输入4个空格
set tabstop=4
" 格式化时缩进尺寸为4个空格
set shiftwidth=4
" 让 Vim 把连续的空格视为一个 Tab, 删除时可以一次删掉一个 Tab 的空格数量
set softtabstop=4
" 把制表符转换为多个空格, 具体空格数量参考 tabstop 和 shiftwidth
set expandtab
" 在行和段的开始出使用 Tab
set smarttab
" 合并两行中文时, 不在中间加空格
set formatoptions+=B
" 合并行时不添加多余空格
set nojoinspaces
" 高亮显示匹配的括号
set showmatch
" 高亮显示搜索到的关键字
set hlsearch
" 即时搜索
set incsearch
" 智能大小写敏感, 只要有一个字母大写, 就大小写敏感, 否则不敏感
set ignorecase smartcase

经过这一系列配置, 你会发现你的 Vim 变好看了一些, 也更好用了一些.

按键映射

Vim 中有大量的快捷键(按键映射), 除此之外, 你还可以配置自己的按键映射.

使用 :map 相关的命令可以定义自己的快捷键. map 命令的本质是将一个按键序列转化为另一个按键序列. 这里我们根据一个例子, 来理解 Vim 的按键映射. 在命令模式下执行下面的命令可以将 F3 映射为一个功能: 在文件最底部输入文件名.

:map <F3> GoFile Name: <Esc>"%p

在命令模式下输入上述命令, 回车, 然后在普通模式下按 F3, 你会发现文件底部输入了当前文件名, 很神奇吧.

接下来解释一下上面的命令干了什么: 首先使用 map 命令进行按键映射, 要映射的键是 <F3>, 然后空格后面的内容就都是新的按键序列了, G 移动到最后一行, o 开始一个新行并进入插入模式, 然后插入文本 ‘File Name: ‘, 然后<Esc>键进入普通模式, 然后使用 “% 访问文件名寄存器, 最后 p 粘贴出寄存器内容.

可以看到, 按键映射本质上就是一系列输入, 包括各种模式的切换, 都在输入序列中了.

map 命令可以在普通模式, 可视模式下工作, 有时候需要在特定的模式下使用某些按键映射, Vim 也提供了相应的命令, 如下表:

递归 非递归 模式
:map :noremap 普通模式, 可视模式
:nmap :nnoremap 普通模式
:xmap :xnoremap 可视模式
:cmap :cnoremap 命令模式
:imap :inoremap 插入模式

这里解释一下递归的问题: 假设你将 按键 a 映射成了 按键 b, 又把按键 b 映射成了 命令x, 当使用递归命令映射的情况下, 你按 a 键, 最终会执行 命令x, 如果使用非递归命令映射, 则你按 a 键, 会执行 b 键的功能, 只有按 b 键, 才会执行 命令x.

结论: 如果确实应该使用递归, 则使用递归映射, 否则一般使用非递归映射

另外, F1-F12键, Esc键, 回车键等各种功能键都有对应的字母序列, 可通过下面的命令查看:

help key-notation

注意: 功能键的字母序列不区分大小写, 即 和 是 等效的.

另外, 使用上述命令配置的按键映射只对当前 Vim 实例有效, 重启 Vim 之后就无效了. 那咋办? 很简单, 把配置写在 vimrc 中就可以了, 下面是我的一些按键配置:

" 将 kk 配置成 esc, Esc 键太远了, 从插入模式到普通模式, 连续按两次 k 即可
inoremap kk <esc>
" ctrl-h  光标左移一格
inoremap <c-h> <left>
" ctrl-j  垂直下移一行
inoremap <c-j> <down>
" ctrl-k  垂直上移一行
inoremap <c-k> <up>
" ctrl-l  光标右移一格
inoremap <c-l> <right>
" 按 U 执行 redo
noremap U <c-r>
" shift 回车, 在下一行输入
inoremap <s-cr> <end><cr>
" 在可视模式下使用p粘贴时不替换寄存器内容, 这里是利用了黑洞寄存器
vnoremap p "_dP
" 对于很长的行, vim会自动折行, 此时 j 或者 k 就会一下跳很多行,
" 使用 gk,gj 可以避免跳过多行, 但是不方便, 所以做了如下映射.
nnoremap k gk
nnoremap j gj
vnoremap k gk
vnoremap j gj

看到这里你可能会有疑问: 在插入模式下, 我把 Ctrl-h/j/k/l 映射成左下上右, 不觉得麻烦吗? 并不, 因为我使用另一款软件: KeyTweak, 把 Ctrl 键的位置换到了 Alt 键上, 这样我就能很方便地使用 Ctrl 键了.

<leader>

<leader> 键是 Vim 中一个比较特殊的按键, 被称为前置键, 默认是 \, 这个键的作用是: 先按下前置键, 松开后再按别的按键, 就可以形成一套快捷键.

由于 \ 键比较难按到, 一般都会将前置键改为容易按到的键, 我将其改为 ;了, 需要在 vimrc 中添加如下配置:

let mapleader=";"

然后就可以很愉快的使用前置键映射各种快捷键了:

" 将 <leader> 键配置为 ';'
let mapleader=";"
" 按 <leader>w 保存文件
nnoremap <leader>w :w<cr>
" 按 <leader>2 执行上一次的宏
nnoremap <leader>2 @@
" 可视模式下按 <leader>y 将内容写入系统寄存器
vnoremap <leader>y "+y
" 按 <leader>p 将系统寄存器中的内容粘贴出来
nnoremap <leader>p "+p
" 按 <leader>no 取消搜索高亮, 没错, <leader> 键后面可以跟键序列
nnoremap <leader>no :nohlsearch<cr>
" 按 <leader>k 向上移动半屏
nnoremap <leader>k <c-u>
" 按 <leader>j 向下移动半屏
nnoremap <leader>j <c-d>

可以看到, 前置键的映射方式和其他键的映射方式是一样的.

需要注意的是, <leader> 键的按键映射可以将多个按键映射成另一个序列或指令, 例如:

" 将 <leader>no 映射成命令 :nohosearch<cr>
nmap <leader>no :nohlsearch<cr>

这样也会带来一个问题: 如果既有 <leader>n, 又有 <leader>no, 那么当你输入 <leader>n 的时候, Vim 就得等下一个按键 o 的输入(类似于 kk 映射成 Esc), 这会浪费一些时间, 甚至影响你原本的意图, 所以多个键映射尽量不要出现”同序的相同字符”, 改为 <leader>nn, <leader>no 就不会有问题了.

我的 vimrc

很多 vimer 会把自己的 vimrc 挂到网上, 供别人参考. 这里也贴一下我的 vimrc 地址吧:
https://github.com/GraysonGao/MyConfig/blob/master/vim/_vimrc

我其实配置的东西比较少, 大都是些基本配置, 而且添加了详细的注释, 很容易看懂.

小结

现在, 你几乎已经是个高阶玩家了, 现在的你再去看 Vim 的文档以及各种 Vim 的文章, 就很容易看懂了.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/144751.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月18日 下午8:00
下一篇 2022年5月18日 下午8:20


相关推荐

  • 本地部署Ollma和Qwen2.5大模型的详细教程

    本地部署Ollma和Qwen2.5大模型的详细教程

    2026年3月13日
    2
  • android生成coredump,详解coredump–全面

    From:http://blog.csdn.net/tenfyguo/article/details/8159176一,什么是coredump我们经常听到大家说到程序core掉了,需要定位解决,这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程中异常退出或者中止,并且在满足一定条件下(这里为什么说需要满足一定的条件呢?下面会分析)会产生一个叫做core的文件。通常情况下,core文件…

    2022年4月12日
    39
  • Kafka 集群搭建

    Kafka 集群搭建Kafka集群搭建

    2022年4月29日
    25
  • pycharm设置成中文_怎样将pycharm变成中文版的

    pycharm设置成中文_怎样将pycharm变成中文版的Pycharm作为一款IDE,经常作为python编译器。很多人在用pycharm时都是英文格式,现在,本文推荐一种可以将其改成中文模式的方法:1.首先,打开pychram中的“File”,找到“Setting”;2.在“Plugins”中找到汉化插件并安装,这样就可以设置成中文。3.如果想改回英文,可以在“已安装”中取消应用插件即可。…

    2022年8月25日
    10
  • 图解Android中的Binder机制

    图解Android中的Binder机制前言 Binder 做为 Android 中核心机制 对于理解 Android 系统是必不可少的 关于 binder 的文章也有很多 但是每次看总感觉看的不是很懂 到底什么才是 binder 机制 为什么要使用 binder 机制 binder 机制又是怎样运行的呢 这些问题只是了解 binder 机制是不够的 需要从 Android 的整体系统出发来分析 在我找了很多资料后 真正的弄懂了 binder 机制 相信看完这篇文章大家也

    2026年2月26日
    2
  • 讯飞星火怎么登录

    讯飞星火怎么登录

    2026年3月14日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号