发布于 

Vim/Neovim 的使用和配置

Vi → Vim → Neovim

Vim 是文本/代码编辑器之中最为优秀经典的上古神器之一,也是早年 Vi 编辑器的加强版,强大、高效、免费开源且跨平台。

Neovim 可以说是 Vim 的改进版,而且与 Vim 的编辑模型和 Vimscript 语言完全兼容。

基础操作

Vim 在终端中启动命令为 vim,Neovim 为 nvim, 共分为三种模式:

  • 命令模式(Command mode)
  • 写入模式(Insert mode)
  • 底线命令模式(Last line mode)

初次使用

进入 vim 后初始为命令模式,k j h l 为上下左右移动光标

  • i 进入 写入模式ESC 回到 命令模式
  • 在命令模式下,按 : 进入 底线命令模式
  • 底线命令模式下输入 :w 后回车为写入文件;:q 为退出 nvim;:wq 为保存文件并退出

ctrl+[ 或 ctrl+c 为 ESC 默认快捷键,可自己设置为更方便的映射

指令详解

主要是掌握 操作逻辑 , 都是以 先指令后动作 这个模式

移动

  • w:跳到下一个单词的开头

  • e:跳到下一个单词的结尾

  • b:跳到上一个单词的开头,由 blank 字符分隔的单词,使用 WE

  • %:匹配括号移动(需要把光标先移到括号上)

  • *:匹配光标当前所在的单词(下一个)

  • #:匹配光标当前所在的单词(上一个)

插入

  • i:insert 在光标前插入
  • I:在行最前面插入,快捷键为 `Shift+i``
  • a:append 在光标后开始编辑
  • A:在行最后面开始编辑
  • o:在当前行下一行开始编辑
  • O:在当前行上一行开始编辑

删除

  • s:删除当前字符并进入插入模式

  • u:撤回上一步操作

  • Ctrl + R :重做

  • U: 撤销对整行的操作

  • x:删除光标下的字符

  • dl:删除光标右边的字符 ( 同 x )

  • dh:删除光标左边的字符

  • d3l :删除光标右边的三个字符

  • dd:删除该行(等于剪贴,p 粘贴)

  • dj:删除该行和下一行

  • dG : 删除当前行至文档尾部

  • dt" :删除 “ 前的所有内容

  • cc :与 d 操作同理,删除并进入写入模式

复制

  • y、d、x 都会把文本复制到剪切板(默认不与系统剪切板共享)
  • "+y 复制文本共享至系统剪切板
  • y:与 d 操作同理

更改

  • r :替换光标所在位置的字符
  • R:连续替换字符
  • c3l:替换右边三个字符
  • cw:更改下一个词
  • cb:更改上一个词
  • cc:替换整行
  • ci":修改双引号内的字符

change in “

  • f" :光标跳到当前行下一个 “
  • 3fa:光标跳到当前行第三个出现的 a
  • F :反向查找
  • t":光标跳到当前行下一个 “ 的前一个字符
  • T:反向
  • cfx:修改 x 字符前的内容(包括 x)

搜索

  • /:输入后回车
  • n:下一条搜索结果
  • N:上一条搜索结果
  • zz:跳到光标位置

分屏

  • :split 上下分屏
  • :vsplit 左右分屏
  • :set vsplitright 光标右边
  • :e [文件路径] 打开新文件
  • Ctrl+w 后按 hjkl 光标在分屏中移动

跳转

  • gg:跳到首行
  • G:跳到尾行
  • N G :到第 N 行

8G 跳到第 8 行

选中

  • v :字符选中
  • V :行选中
  • Ctrl+v :块选中
  • vi":选中 “ 中的字符

替换

  • :s/from/to/ 将当前行中的第一个 from 替换成 to
  • :s/from/to/g 将当前行中的所有 from 都替换成 to
  • :%s/from/to/g 对所有行的内容进行替换

配色

:color (color 后一个空格 按 Tab 选择, 通过插件安装更好看的配色)



配置

通过修改 vim 的配置文件和安装插件,能让它更加强大高效

  • vim 的配置文件目录在:~/.vimrc
  • neovim 的配置文件目录在:~/.config/nvim/init.vim

没有的话需自己创建,

  • nvim ~/.config/nvim/init.vim

创建软链接,方便修改

  • ln -s ~/.config/nvim/init.vim .nvim

在配置文件中 " 为注释

::: collapse 把 macOS 终端默认的文本编辑器由 vim 替换为 neovim

1
2
3
4
5
6
where vim
/usr/bin/vim
where nvim
/usr/local/bin/nvim
sudo mv /usr/bin/vim /usr/bin/vim-original
sudo ln /usr/local/bin/nvim /usr/bin/vim

:::

修改按键

在命令模式下起作用:

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
 _   ___     _____ __  __
| \ | \ \ / /_ _| \/ |
| \| |\ \ / / | || |\/| |
| |\ | \ V / | || | | |
|_| \_| \_/ |___|_| |_|
--------------------------
imap <Up> <Nop>
nmap <Up> <Nop>
imap <Down> <Nop>
nmap <Down> <Nop>
imap <Left> <Nop>
nmap <Left> <Nop>
imap <Right> <Nop>
nmap <Right> <Nop>
" 让方向键失效
imap kj <esc>
" 按 kj 等同于按 Esc
noremap a b
" 在普通模式下,让按a键等于按b键盘,仅为示例
noremap K 5k
noremap J 5j
" 实现快速换行
map S :w<CR>
" 让按 S 等同于执行 :w 即保存
map ? :nohlsearch<CR>
" 按 ? 取消高亮搜索结果
map s <nop>
" 让按 s 无效果
map Q :q<CR>
" 按 Q 退出nvim
nmap <CR> o<Esc>
" 按回车等于换行
vnoremap Y "+y
" 可视模式下按Y等于"+y,复制到系统剪切板
map sl :set splitright<CR>:vsplit<CR>
" 按 sl 向右分屏,后面同理
map sh :set nosplitright<CR>:vsplit<CR>
map sk :set nosplitbelow<CR>:split<CR>
map sj :set splitbelow<CR>:split<CR>

let mapleader=" "
map <LEADER>l <C-w>l
map <LEADER>k <C-w>k
map <LEADER>h <C-w>h
map <LEADER>j <C-w>j
" 修改 空格+hjkl 为光标在分屏中移动
map <up> :res +5<CR>
map <down> :res -5<CR>
map <left> :vertical resize-5<CR>
map <right> :vertical resize+5<CR>
" 通过上下左右箭头修改分屏大小
map sv <C-w>t<C-w>H
map sh <C-w>t<C-w>K
" sv 改为左右分屏
map <LEADER>tt :tabe<CR>
map <LEADER>th :-tabnext<CR>
map <LEADER>tl :+tabnext<CR>
" tt 新建标签页 th移动在左边的标签页 tl右

修改设置

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
set clipboard+=unnamedplus
" 让vim与系统共享同一个剪切板
set number
" 显示行号
set wildmenu
" 底线命令模式下,按Tab显示补全
set relativenumber
" 显示相对行号
set norelativenumber
" 取消显示相对行号
set cursorline
" 突显当前行
set scrolloff=5
" 光标与窗口的距离为5行
set wrap
" 设置字符不超出窗口
set ignorecase
" 搜索忽略大小写
set smartcase
" 智能搜索匹配
set tabstop=4
set shiftwidth=4
" 调整Tab和每一级缩进的长度
let &t_SI = "\<Esc>]50;CursorShape=1\x7"
let &t_EI = "\<Esc>]50;CursorShape=0\x7"
" 插入状态的光标改为竖线,nvim默认开启

安装插件

vim-plug

Vim 的一款插件管理器

https://github.com/junegunn/vim-plug

安装

Vim

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

Neovim

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

使用

以下命令均在命令模式下使用

  • 安装插件 :PlugInstall
  • 更新插件 :PlugUpdate
  • 删除插件 PlugClean(先在 init.vim 中,注释掉该插件,然后打开 Nvim 使用 :PlugClean 命令清除该插件)
  • 查看插件状态::PlugStatus
  • 升级 vim-plug::PlugUpgrade

如果想暂时禁用某个插件,但不删除它:

在 inti.vim 中注释掉该插件 或者 Plug '插件名', { 'on': [] }


vim-airline

状态栏插件

https://github.com/vim-airline/vim-airline

https://github.com/vim-airline/vim-airline-themes

在配置文件中添加:

1
2
3
4
call plug#begin('~/.vim/plugged')
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline/vim-airline-themes'
call plug#end()

保存后输入命令 PlugInstall(按 Tab 键可以补全),显示 Finishing … Done! 就安装好了

vim-snazzy

配色主题

https://github.com/connorholyday/vim-snazzy

https://github.com/w0ng/vim-hybrid

vim-devicons

显示图标

https://github.com/ryanoasis/vim-devicons

nerdtree

文件树

https://github.com/scrooloose/nerdtree

vim-nerdtree-syntax-highlight

nerdtree 文件名高亮

https://github.com/tiagofumo/vim-nerdtree-syntax-highlight

vim-floaterm

悬浮窗口使用终端

https://github.com/voldikss/vim-floaterm

https://zhuanlan.zhihu.com/p/107749687

coc.nvim

一款针对 neovim 所开发的代码补全插件

https://github.com/neoclide/coc.nvim

::: collapse 示例安装 java 代码补全

安装插件:Plug 'neoclide/coc.nvim', {'branch': 'release'}
执行:CocInstall coc-java

安装成功:

打开 java 文件会自动下载 jdt.ls:

默认下载地址是 eclipse.org :

下载太慢的话可以从 中科大镜像站 下载,解压文件至 ~/.config/coc/extensions/coc-java-data/server

:::

Coc.nvim 系列(一): 为了更好的补全体验

tagbar

生成标签

https://github.com/majutsushi/tagbar

如果在加载该插件时,报错: Tagbar: Exuberant ctags not found!

安装 ctags 即可解决问题

Manjaro Linux:sudo pacman -S ctags

macOS:brew install ctags

Markdown Preview for Neovim

https://github.com/iamcco/markdown-preview.nvim

goyo

优雅的文本编辑体验

https://github.com/junegunn/goyo.vim

vim-startify

快捷启动页

https://github.com/mhinz/vim-startify

indentLine

缩进 “刻度尺”

https://github.com/Yggdroot/indentLine

nerdcommenter

代码注释

https://github.com/scrooloose/nerdcommenter

undotree

编辑历史记录

https://github.com/mbbill/undotree

auto-pairs

自动补全一对括号

https://github.com/jiangmiao/auto-pairs

YouCompleteMe

强大的代码补全

https://github.com/ycm-core/YouCompleteMe

安装:

cd ~/.vim/plugged/YouCompleteMe

sudo python3 install.py

参考