返回

Vim Introduction

本文介绍vim的安装、配置以及插件使用。


安装vim

Vim官网) 是一个非常流行的文本编辑器,可以在多种操作系统上安装和使用。下面是如何在不同系统上安装 Vim 的方法:

在 Linux 上安装 Vim

大多数 Linux 发行版都在其软件包管理器中包含 Vim。可以使用包管理器来安装它。

  1. Debian/Ubuntu 系列

    1
    2
    
    sudo apt update
    sudo apt install vim
    
  2. CentOS

    1
    
    sudo yum install vim
    

在 macOS 上安装 Vim

macOS 通常预装了 Vim,但可能不是最新版本。你可以使用 Homebrew 来安装或更新 Vim。

使用 Homebrew 安装

  • 确保 Homebrew 已安装。你可以在终端中运行以下命令来安装 Homebrew:

    1
    
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    
  • 使用 Homebrew 安装 Vim:

    1
    2
    
    brew update
    brew install vim
    

在 Windows 上安装 Vim

在 Windows 上,你可以通过以下方法安装 Vim:

直接下载安装程序:

  1. 访问 Vim 官方下载页面。推荐vim-win32-installer(会及时提供最新编译版)。

  2. 在 “PC: MS-DOS and MS-Windows” 部分,下载适用于 Windows 的安装程序(通常是 gvim 安装程序)。

  3. 运行下载的安装程序,按照提示完成安装。

  4. 安装完成之后建议添加如下两个环境变量。

    1. Path环境变量:添加的值为vim安装路径里面的具体版本。如:

      • D:\Vim\vim91 or %VIM%\vim91

        image-20240531122127080

    2. 环境变量VIM:值为vim的安装路径。如

      image-20240531122015284

  5. Windows版本的vim提供了卸载程序。在程序和功能中找到即可卸载。

Windows安装结束后,你会发现开始菜单中有好多Vim,而且名字都不一样。

他们的区别如下:

  1. 有g和没有g gVim 是在windows下的Gui图形用户界面的的 vim (GUI Vim),支持windows的一些快捷方式,支持鼠标操作 vim 是在windows下的类似linux vi 编辑的界面,只能用键盘操作。 vim的操作指令同时适用于gVim
  2. Vim, Vim Diff, Vim Easy, Vim Read-only Diff 是用来对比两个文件内容用的,直接打开挺没用的,不过直接拖2个文件到快捷方式上倒是可行; Easy启动的时候是insert模式,适合普通windows用户的习惯; Read-Only的用途:比如用read-only打开已经用vim打开过的文件,就不会提示让人烦躁的.swp文件存在的问题;

通用方法:编译安装 Vim

如果你希望安装最新版本的 Vim 或自定义编译选项,可以从源代码编译安装。

  1. 安装必要的依赖项(以 Ubuntu 为例):

    1
    2
    
    sudo apt update
    sudo apt install git make ncurses-dev gcc
    
  2. 克隆 Vim 的源代码仓库:

    1
    2
    
    git clone https://github.com/vim/vim.git
    cd vim
    
  3. 配置并编译 Vim:

    1
    2
    
    ./configure
    make
    
  4. 安装 Vim:

    1
    
    sudo make install
    

在IDE中安装vim插件

许多现代集成开发环境(IDE)提供了 Vim 模拟插件。我们在享受 IDE 强大功能的同时,可以继续使用Vim的编辑风格。

要在IDE中安装vim插件,只需要在对应IDE的插件市场搜索安装即可,我常用的:

  • JetBrains系列:IdeaVim
    • 可以配置 ~/.ideavimrc 文件来个性化设置。
  • Visual Studio Code (VS Code):Vim
    • 可通过 settings.json 文件进行配置和自定义。
  • Sublime Text:Vintageous
    • 可以通过 Sublime Text 的设置进行配置和自定义。
  • ……

配置vim

Vim 是一个高度可配置的文本编辑器,可以通过编辑其配置文件来调整和扩展其功能。

配置文件介绍

Vim没有提供图形化的配置界面,配置Vim都是通过配置文件(.vimrc)实现的:

  • 在 Unix 或 Linux 系统中,.vimrc 文件通常位于用户的主目录中,例如 ~/.vimrc

  • 在 Windows 系统中,.vimrc 文件可以放在用户主目录下,例如 C:\Users\<username>\_vimrc,或者 C:\Users\<username>\.vimrc

  • **总结:Vim配置文件都在用户的家目录下,名称都可以用.vimrc表示。**没有手动创建一个空文件,直接使用。

  • 要修改配置,就在.vimrc文件中修改就行。

注意事项

  • 注释是以"开头。

  • 部分vim插件版的配置文件名并不是.vimrc

    • 如ideavim:~/.ideavimr
  • 这里总结一下git bash内置的vim插件:

    • 该vim版本也可以用~/.vimrc进行配置值。

      • 默认的配置文件在git安装位置/etc/vimrc。只读。
    • 如果期望git bash不使用内置的vim插件,使用的是自己安装的vim版本:

      • 可以修改git bash的配置文件.bashrc,添加vim的安装位置。
      1
      
      export PATH="/d/vim/vim91:$PATH"
      
      • 原理:使自己安装的vim版本优先级最高。先加载。尽管我在PATH变量中添加了自己安装的vim版本路径,但是无法保证谁的优先级高,所以使用了上面办法,使自己安装的vim版本优先级最高。先加载。

常见的 Vim 配置项

.vimrc

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
""""""基本设置""""""
filetype on "开启文件类型侦测
filetype indent on  "适应不同语言的缩进
syntax enable "开启语法高亮功能
syntax on   "允许使用用户配色

""""""显示设置""""""
set shortmess=atI         "不显示启动提示信息
set laststatus=2          "总是显示状态栏,命令行(在状态行下)的高度,默认为1,这里是2。
" 我的状态行显示的内容(包括文件类型和解码)后续用插件美化。
"set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")}
"set statusline=[%F]%y%r%m%*%=[Line:%l/%L,Column:%c][%p%%]
"set cmdheight=2         " 命令行(在状态行下)的高度,默认为1,这里是2
set ruler                 "显示光标位置
set number                "显示行号
"set cursorline            "高亮显示当前行
"set cursorcolumn            "高亮显示当前列
set hlsearch                " 高亮搜索结果
set incsearch               "边输边高亮
set ignorecase              "搜索时忽略大小写
set smartcase				" 智能大小写匹配

"set relativenumber     "其他行显示相对行号
set scrolloff=5     "垂直滚动时光标距底部位置

""""""编码设置""""""
set fileencodings=utf-8,gb2312,gbk,gb18030,cp936    " 检测文件编码,将fileencoding设置为最终编码
set fileencoding=utf-8                              " 保存时的文件编码
set termencoding=utf-8                              " 终端的输出字符编码
set encoding=utf-8                                  " VIM打开文件使用的内部编码

""""""编辑设置""""""
set expandtab     "扩展制表符为空格
set tabstop=4     "制表符占空格数
set softtabstop=4 "将连续数量的空格视为一个制表符
set shiftwidth=4  "自动缩进所使用的空格数
set textwidth=80 "设置一行内容的宽度
set linebreak       "防止单词内部折行
set wrapmargin=5      "指定折行处与右边缘空格数
set smarttab        "使用智能制表符
set smartindent "智能缩进(好处是修改代码时会根据代码规则自动缩进,坏处是当用`:n,m>`对齐左侧的注释将不会被移动)
"set autoindent "自动缩进(这两个差不多,感觉在大括号自动配对时,用智能缩进好点)
set wildmenu      "vim命令自动补全
set autochdir     "自动定位当前目录。
set wrap          "启用自动换行"
set autoread        "文件改动时自动载入
set t_Co=256        "terminal Color 支持256色(默认是8色)
hi comment ctermfg=6 "设置注释颜色
set magic                   " 设置魔术
set guioptions-=T           " 隐藏gui工具栏
set guioptions-=m           " 隐藏gui菜单栏
set guioptions-=r           " 删去gui滚动条"
" 使用更友好的颜色方案
colorscheme desert
" 设置背景色
set background=dark
" 显示命令输入
set showcmd

"设置gui字体
set guifont=Courier\ New:h20

" 设置宽高
"set lines=15 columns=50 

" 启用真彩色颜色支持,让配色方案显示更好。
set termguicolors

注意配置了上面大部分设置,在大多数主题中只需要在vim-plug后面选择颜色方案colorscheme即可。


插件使用

Vim 的功能可以通过插件进一步扩展。使用插件可以增强Vim的功能,如语法高亮、代码补全、文件浏览器、版本控制集成、模糊搜索等。

为了方便安装,更新,删除插件,我们一般使用插件管理器进行插件管理。

推荐使用的插件管理器是vim-plug。与其他插件管理器(如 Vundle 和 Pathogen)相比,vim-plug 提供了更快的性能和更多的功能,如并行安装插件、延迟加载插件、使用简单等。

安装 vim-plug

  1. 下载并安装 vim-plug: 在终端中运行以下命令,这会将 vim-plug 下载到你的 Vim 自动加载目录下:

    Linux:

    1
    2
    
    curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
        https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
    

    Windows:

    1
    2
    
    curl -fLo ~/vimfiles/autoload/plug.vim --create-dirs \
        https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
    

    注意:需要拥有curl命令,并且终端能够访问外网。

    如果没有,可以手动下载plug.vim,并将文件放在 windows 中的 ~/vimfiles/autoload 或 Linux 中的 ~/.vim/autoload 文件夹内,没有手动创建。

插件推荐

  1. 状态栏和主题

    • lightline.vim:轻量级状态栏插件。
    • vim-airline:高级状态栏插件,提供丰富的功能和美观的主题。
    • **dracula-theme**主题
    • **material.vim**主题
    • **vim-transparent**终端透明
      • 这个插件,可以配置让其他插件也透明。
    • vim-deus主题
    • 配置主题建议都配置set termguicolors" 启用真彩色颜色支持让配色方案显示更好。会让终端透明效果更好。
  2. 如果喜欢用gvim(我用sublme的Vim插件)。可以:

    1. 全屏显示:

      gvimfullscreen_win32 32位系统: - 下载gvimfullscreen.dll - 将其放入gvim.exe同目录的文件夹下 - 配置文件中map <F11> <Esc>:call libcallnr("gvimfullscreen.dll", "ToggleFullScreen", 0)<CR>

      64位系统同上, 用gvimfullscreen_64代替

      现在你就可以用<F11>来进行全屏操作

    2. 透明显示

      vimtweak

      方法基本同上, 选择vimtweak32.dllvimtweak64.dll放入文件夹, 在vimrc中

      1
      
      au GUIEnter * call libcallnr("vimtweak64.dll", "SetAlpha", 200)
      

      其中数值200可以选择0-255, 255为不透明

  3. 一组默认配置(每个人都同意默认的配置):vim-sensible:插件的功能:

    1. 'backspace':在插入模式下按退格键可删除任何内容。默认只能删除新添加的。
    2. 'incsearch':按回车键之前开始搜索。
    3. 'listchars':使:set list(可见空白)更漂亮。
    4. 'scrolloff':始终在光标上方/下方显示至少一行。
    5. 'autoread':自动加载文件更改。您可以按 撤消u
    6. runtime! macros/matchit.vim:加载 Vim 附带的 matchit.vim 版本。
  4. 文件浏览和导航

    • NERDTree:文件系统浏览器,提供树状目录视图。
      • 也可以用内置的:Vex浏览目录。它没有目录树结构。
    • fzf.vim:模糊查找工具,基于 fzf 命令行工具。
  5. 语法高亮和语法检查

    • vim-polyglot:支持多种编程语言的语法高亮。
    • ALE:异步语法检查和修复工具。
  6. 代码补全

    • YouCompleteMe:强大的代码补全插件,支持多种编程语言。
    • coc.nvim:基于 VSCode 插件的代码补全和语言服务器支持。
    • 没打算用vim写代码,没花时间去配置
  7. 版本控制

    • vim-fugitive:Git 集成插件,提供强大的 Git 操作支持。
    • gitgutter:在编辑器中显示 Git 的改动信息。
    • 都是在终端中使用git,我没有配置。
  8. 其他实用插件

    • vim-highlightedyank:让复制区域高亮。(ideavim内置插件。)
    • auto-pairs:成对添加、删除、高亮括号。
    • surround.vim:轻松操作成对符号(例如引号、括号)。
      • auto-pairs的扩展。成对修改括号为别的括号。如cs"'将成对"改为'
    • commentary.vim:快速注释和取消注释代码。
      • 在普通模式下,移动光标到要注释的行,然后使用 gcc 注释/取消注释当前行。
      • 在可视模式下,选择要注释的代码块,然后使用 gc 注释/取消注释选定的代码。
      • 很智能,好用。(ideavim内置插件。)

配置插件

  1. 编辑 .vimrc 文件,添加插件管理器配置

    windwos为例,将插件安装位置保存在$VIM/vimfiles/plugged,将下面代码追加到.vimrc中:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    
    """"""插件vim-plug""""""
    
    " 初始化 vim-plug
    " Linux上默认
    " call plug#begin()
    " windows上自定义插件安装位置
    call plug#begin('$VIM/vimfiles/plugged')
    " The default plugin directory will be as follows:
    "   - Vim (Linux/macOS): '~/.vim/plugged'
    "   - Vim (Windows): '~/vimfiles/plugged'
    "   - Neovim (Linux/macOS/Windows): stdpath('data') . '/plugged'
    " You can specify a custom plugin directory by passing it as the argument
    "   - e.g. `call plug#begin('~/.vim/plugged')`
    "   - Avoid using standard Vim directory names like 'plugin'
    
    " 添加插件列表,确保使用的是单引号。
    " Plug 'tpope/vim-sensible'
    " Plug 'scrooloose/nerdtree'
    " Plug 'itchyny/lightline.vim'
    
    " Call plug#end to update &runtimepath and initialize the plugin system.
    " - It automatically executes `filetype plugin indent on` and `syntax enable`
    " 结束插件配置
    call plug#end()
    " You can revert the settings after the call like so:
    "   filetype indent off   " Disable file-type-specific indentation
    "   syntax off            " Disable syntax highlighting
    
    """"""插件vim-plug结束""""""
    
  2. 添加插件:我们只需要将插件添加到Plug ''里面即可,别忘记取消注释。插件名一般为为github作者/仓库名

  3. 安装插件:打开vim运行:PlugInstall命令来安装 .vimrc 中定义的插件。

  4. 更新插件: 要更新所有插件,运行::PlugUpdate

  5. 清除未使用的插件: 如果你从配置中移除了一些插件,可以运行:PlugClean命令来删除未使用的插件。

  6. 检查插件状态: 要检查插件的状态和版本,运行:PlugStatus

  7. Done表示成功,:q退出插件管理器。失败退出重试。或R重试。

  8. 插件安装成功示例:

    :PlugInstall


效果展示

vim配置效果:

material:default:

material:default

material:palenight:

material:palenight

区别不是很大。

deus:

deus

我的完整配置


扩展

自定义快捷键

在Vim中自定义快捷键,其实就创建快捷键与命令之间的映射关系。

用到的命令是mapnoremap。注意:要将命令配置在.vimrc中。

格式:映射命令 自定义快捷键 命令,中间用空格分隔开。

前面有n, i, v, c中的任意一个字符表示对应的模式。如nmapnnoremap表示Normal模式下的映射关系。没有表示所有模式的映射关系。

二者区别

  • map会递归解析映射。

  • noremap不会递归解析映射。

  • 意思是如果命令中有别的映射,一个会解析,一个不会。如:

    1
    2
    3
    
    nmap yy dd  # 修改了默认映射。
    nnoremap ,y "*yy # 会执行复制一行命令到剪切板。
    nmap ,d "*yy # 会删除一行命令到剪切板。解析了yy映射。
    
  • 看需求使用,是否需要递归映射。没有需求推荐使用noremap创建映射,防止映射多了,递归解析,导致无限循环或意外行为。

注意事项:

  • 当自定义的快捷键与vim预定义的快捷键冲突时,自定义的快捷键会覆盖预定义的快捷键。

  • 查看自定义的快捷键:map。或者查看.vimrc

    • 使用 :verbose map 命令可以查看详细的映射信息,包括映射是在哪里定义的。
  • 取消自定义的快捷键:在自定义快捷键的后面添加u+自定义的快捷键。如

    1
    2
    3
    
    nnoremap ,y "*yy # 自定义快捷键
    ...
    unnoremap ,y # 取消快捷键
    

常用键表示法

  1. 普通字符

    • 直接输入字母、数字、符号。例如:a, b, 1, 2, #, *
  2. 控制键

    • 使用 <Ctrl>(或 <C>)表示控制键。例如:<C-a> 表示 Ctrl+a
  3. 功能键

    • 使用 <F1><F12> 表示功能键。例如:<F2> 表示功能键 F2
  4. 特殊键

    • 使用尖括号包围的特殊键表示法。例如:
      • <Esc>:Escape 键
      • <CR>:回车键(Enter)
      • <Tab>:制表符键(Tab)
      • <Space>:空格键(Space)
      • <BS>:退格键(Backspace)
      • <Del>:删除键(Delete)
      • <Up>:上箭头键
      • <Down>:下箭头键
      • <Left>:左箭头键
      • <Right>:右箭头键
  5. 组合键

    • 可以组合使用。例如:<C-Space> 表示 Ctrl+Space<C-Left> 表示 Ctrl+Left
  6. Leader

    1. 使用 <leader> 键可以避免与默认快捷键冲突。默认情况下,<leader> 键是反斜杠 \,但你可以在 .vimrc 中重新定义它:

      1
      
      let mapleader = ","
      
    2. 然后你可以使用 <leader> 键创建自定义快捷键:

      1
      
      nnoremap <leader>y "*yy
      

      这样,你的自定义快捷键将使用 ,y 来触发,并且<leader>可以更改为你喜欢但不冲突的键。逗号跟反斜杠就是,不过我更喜欢用逗号。

示例:在vim中没有快捷键删除光标后面的字符。我们来自定义映射实现:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
" ctrl-k:删除光标后面的字符,部分版本不支持
nnoremap <C-k> D
inoremap <C-k> <Esc>lC
vnoremap <C-k> d
" 定义删除光标后所有字符的函数
function! DeleteAfterCursor()
    " 获取当前光标在命令行中的位置
    let current_pos = getcmdpos()
    " 获取当前命令行的内容
    let cmdline = getcmdline()
    " 截取字符串,获取光标前的部分
    let new_cmdline = strpart(cmdline, 0, current_pos - 1)
    " 设置新的命令行内容,只保留光标前的部分,去掉光标位置及其后的所有字符
    call setcmdline(new_cmdline)
    return ''
endfunction

" 在命令行模式下映射 <C-k> 为删除光标后的所有字符
" 用表达式寄存器调用删除函数,最后回车
cnoremap <C-k> <C-r>=DeleteAfterCursor()<CR>

通过上面的命令,我们实现了终端在Emacs模式下的ctrl-k快捷键。但是只能在vim中使用,并且vim版本需要支持表达式寄存器。

如果终端的编辑模式为vi,依旧不能解决问题。在insert模式下不能使用ctl-k快捷键。需要修改终端的映射关系.inputrc。不过够用了。

示例:配置复制、粘贴、剪切快捷键

1
2
3
4
5
6
" 配置复制、粘贴、剪切
vnoremap <C-c> "*y
inoremap <C-v> <C-r>*
cnoremap <C-v> <C-r>*
vnoremap <C-v> "*p
vnoremap <C-x> "*d

需要注意的是不要配置普通模式下的ctrl-v,它是可视块的快捷键,可以配置visual模式的,需要按两次才能粘贴。不过够用了。

命令参考Vim Common Commands

Licensed under CC BY-NC-SA 4.0
最后更新于 Jun 02, 2024 21:52 +0800