NeoVim使用

常用 vimrc 设置

1
set shiftwidth=4 tabstop=4 softtabstop=4 expandtab autoindent smartindent

设置

有哪些配置文件,在什么目录

:version 可查看配置文件搜索位置。

初始化过程

  1. 系统vimrc $VIM/vimrc
  2. 最先找到的脚本进行执行
    1. $VIMINIT
    1. $HOME/.vimrc
    1. $HOME/.vim/vimrc
    1. $EXINIT
    1. $HOME/.exrc
    1. $VIMRUNTIME/defaults.vim
  3. 加载 Plugin
    一般插件放在: $HOME/.vim/plugin/**/*.vim
  4. 加载 package
    一般位置: $HOME/.vim/pack/foo/start/bar/plugin/**/*.vim

runtimepath

runtimepath 就是一群目录,用来查找在其中 runtime files。

搜索顺序

  1. User Home .vim 【用户一般放这】
  2. Sysadmin folder
  3. $VIMRUNTIME 【系统默认一般放这】
  4. Sysadmin “after” folder
  5. User Home “after” folder

例如:

1
2
3
4
5
/homes/someone/.vim
/usr/local/share/vim/vimfiles
/usr/local/share/vim/vim82
/usr/local/share/vim/vimfiles/after
/homes/someone/.vim/after

这些runtimepath一般有如下目录结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
syntax/           # 语法高亮,高亮规则文件放里面,配合filetype配置使用
compiler/
ftdetect/         # 文件类型
filetype.vim      # 文件类型
scripts.vim       # 文件类型
autoload/         # 预定义函数放这里,通过 :call filename#function_name 调用
ftplugin/
plugin/
pack/
colors/
doc/
import/
keymap/
lang/
menu.vim
print/
spell/
tutor
indent/

:set rtp? 查看当前的 runtimepath

不想加载任何配置 & 插件

1
2
3
vim -u NONE
# 或
vim -u NORC
1
2
# 不加载任何config设置
vi -Nu NORC xxx.py

配置文件加载过程

  • runtimepath
    搜索配置文件的目录列表

  • 运行时加载配置

    1
    :so ~/.vim/vimrc
    
1
2
3
4
5
6
7
8
9
:filetype plugin indent on

# 文件类型
# - 直接指定
:filetype=python
# - 自动识别
:filetype detect

:syntax on
1
2
# 退格键支持删除
set backspace=start,eol,indent
1
set hidden
1
set noswapfile
1
2
let $RTP=split(&runtimepath, ',')[0]
let $RC="$HOME/.vim/vimrc"
1
2
3
4
# 显示TAB、换行等隐藏字符
:set list
# 关闭显示
:set list!
1
2
3
4
# 缩进设置
:set shiftwidth=4 tabstop=4 softtabstop=4 expandtab autoindent smartindent
# tab规则应用到当前已有代码
retab
1
set colorcolumn=80

q: 列出历史命令

1
2
setlocal path=.,**
setlocal wildignore=*/__pycache__/*,*.pyc

语法高亮

syntax on 打开语法高亮功能,使用默认颜色设置
syntax enable 打开语法高亮功能,使用自定义颜色设置
set syntax=java 到runtimepath 的 syntax 目录中找 java.vim ,据此高亮当前文件
echo exists('g:syntax_on') 查看syntax高亮开关状态,返回1,表明 syntax 高亮 on

文件类型

:h new-filetype 查看帮助

和runtimepath下的如下文件相关:

1
2
3
ftdetect/
filetype.vim
scripts.vim
  1. Override filetype AFTER default filetype detection
    Add :set filetype=file autocommand to a file in ftdetect/
  2. Only create a new filetype AFTER default filetype detection
    Add :setfiletype file autocommand to a file in ftdetect/
  3. Define filetype BEFORE default filetype detection (detectable by name)
    Add :setfiletype file for all files you want to define in filetype.vim
    例如:au BufNewFile,BufRead known_hosts setfiletype *.java
  4. Define filetype BEFORE default filetype detection (detectable by content)
    Add :setfiletype file for all files you want to define in scripts.vim

autoload

当在vim或者plugin中调用 filename#funcname(), Vim 在 runtimepath 中的 autoload 目录搜索文件 filename.vim 后调用 funcname()

例子,上传当前文件到Google Cloud

编辑 ~/.vim/autoload/gcp.vim

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
echo "INITIALIZING AUTOLOAD PLUGIN"
python3 << PYEND
from google.cloud import storage

def upload():
    storage_client = storage.Client()
    bucket = storage_client.bucket('your-pre-created-bucket-on-Google')
    blob = bucket.blob('vim_demo')
    blob.upload_from_filename(vim.eval("expand('%:p')"))
    print('UPLOADED')

PYEND

function gcp#Upload()
    :py3 upload()
endfunction

然后,任意文件vim打开后,执行 :call gcp#Upload 会上传当前文件。

编辑

目录操作

1
2
:pwd
:cd

复制、粘贴

查找/替换 :s

1
2
3
4
5
6
7
8
9
10
11
# 全文搜索 eth1 ,并全部替换为 br1
:%s/eth1/br1/g

# 全文搜索 eth1 ,并全部替换为 br1,但每次都询问是否替换
:%s/eth1/br1/gc

# 全文搜索 eth1 ,并全部替换为 br1, 且忽略大小写(i,即 case insensitive)
:%s/eth1/br1/gi

# 在第3行 - 第7行中搜索 eth1 ,并全部替换为 br1, 
:3,7s/eth1/br1/g

搜索

1
2
3
4
5
# 设置增量搜索
:set incsearch

# 高亮搜索结果
:set hls