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
" 开启行号显示
set nu
" 开启搜索高亮(关闭搜索高亮:noh)
set hlsearch
" 开启语法高亮
syntax on
" 去掉输入错误的提示声音
set noeb
" 在处理未保存或只读文件的时候,弹出确认
set confirm
" 自动缩进
set autoindent
set cindent
" Tab键的宽度
set tabstop=4
" 统一缩进为4
set softtabstop=4
" 设置缩进的空格数为4
set shiftwidth=4
" 搜索忽略大小写
set ignorecase
" 编码设置
set enc=utf-8
set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
" 设置不自动换行(自动换行set wrap)
set nowrap

vi退格键和方向键不能用

用vi打开/etc/vim/vimrc.tiny,追加以下两行:

1
2
set nocompatible
set backspace=2

vim回到上/下个光标位置

  • ctrl +O(o)
  • ctrl + I(i)

vim使用外部命令

一般情况下,直接冒号+感叹号+命令即可。如果需要将外部命令的输出写入当前文件,可以配合命令 :read 或者 :r

1
:r !ls -al

在使用外部命令时,% 表示当前正在编辑的文件

vim自动补全

在插入模式下,输入Ctrl-X将进入^X模式(插入和替换模式的一个子模式)。屏幕底部将显示以下提示信息:

1
-- ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)

自动补全方式:

  • Ctrl-] ,标签(tags)补全
  • Ctrl-D ,定义补全
  • Ctrl-E ,向上滚动文本
  • Ctrl-F ,文件名补全
  • Ctrl-I ,当前文件以及包含进来的文件补全
  • Ctrl-K ,字典补全
  • Ctrl-L ,整行补全
  • Ctrl-N ,当前文件内的关键字补全,向下选择匹配项
  • Ctrl-O ,全能补全
  • Ctrl-P ,当前文件内的关键字补全,向上选择匹配项
  • Ctrl-S ,拼写建议补全
  • Ctrl-U ,用户自定义补全
  • Ctrl-V ,Vim命令补全
  • Ctrl-Y ,向下滚动文本

补全弹出菜单:

随着弹出菜单的显示,将会自动应用第一个匹配项。

使用以下快捷键,可以在弹出菜单中移动和选择匹配项:

  • 使用Ctrl-NCtrl-P上下移动时,输入的文本也会随之变化。
  • 使用**<Up><Down>**上下移动时,输入的文字并不会变化。
  • 使用**<PageUp><PageDown>**键,可以在菜单中翻页。
  • 使用Ctrl-YEnter回车键,将使用当前匹配项完成补全。
  • 使用Ctrl-E键,将关闭菜单并退回到文字输入的原始状态。
  • 使用Esc键,将关闭弹出菜单,但会保留之前应用的匹配项。

请注意,如果您不希望应用任何匹配项完成补全时,应该使用Ctrl-E键,而不是使用Esc键来取消操作。

参考博客:

vim折叠

vim支持6种默认的折叠方式:

  1. manual 手工定义折叠
  2. indent 用缩进表示折叠
  3. expr 用表达式来定义折叠
  4. syntax 用语法高亮来定义折叠
  5. diff 对没有更改的文本进行折叠
  6. marker 用标志折叠,比如{}括号等

一般来说,主要在indent和synatax这两种中选择。配置方法为在 .vimrc 中添加 set foldmethod=indent

常用的折叠指令:

1
2
3
4
5
6
7
zo  "展开当前被折叠的部分
zc "折叠当前部分
za "展开/折叠当前部分
zr "同级代码全部展开一层
zm "同级代码全部再折叠一层
zR "展开全部被折叠的部分
zM "全部折叠

常用配置记录:

1
2
3
4
5
" set foldenable " 打开文本时自动折叠(不用)
set foldmethod=syntax " 设置语法折叠
set foldcolumn=0 " 设置折叠区域的宽度
setlocal foldlevel=1 " 设置折叠层数为 1
" nnoremap <leader><leader><space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR> " 用空格键来开关折叠(不需要,原生的za挺好的)

参考博客:

vimplus

vim支持各种插件,但自己一一配置实在太麻烦了,这里推荐使用vimplus集成环境,相对来说对配置不需要做太多改动,能够快速上手使用。

官方网站:https://github.com/chxuan/vimplus

网络不好的安装教程:https://www.bilibili.com/video/BV1rA41157qK

按照README.md安装完后,可以再执行一下./update.sh,能够解决一些bug。

  • 如果无法使用YouCompleteMe则 cd ~/.vim/plugged/YouCompleteMe
  • python3 install.py –all

使用方面,进入vim后多看看,h中提供的文档,是能够在短时间内上手的。

字符乱码问题我没能解决,以后再说吧。

解决方法,在win上安装指定的字体,并且修改wt的配置文件,把字体设为下载的字体即可。基本逻辑,乱码只是显示的问题,既然wt显示有问题,那就应该从wt上想办法。

字符乱码问题,需要下载Droid Sans Mono Nerd Font,不用下载了,~/.vimplus/fonts/ 目录里面已经连同准备好了。下载oft文件后放至以下三个字体目录之一:

  • /usr/share/fonts
  • /usr/local/share/fonts (我更加喜欢这种方式,因为这个文件下的fonts默认是看空的,第三方的字体会安装在另外两个文件里,管理起来有点麻烦,所以我更愿意放在这个文件夹里)
  • ~/.local/share/fonts
  • ~/.fonts # 此路径已经不推荐使用

更新缓存

1
sudo fc-cache -fv .fonts (.fonts为你的字体目录)

查看已安装的字体:

1
fc-list | grep xxx

几个和修改字体相关的指令,暂时用不上,还是记一下:

1
2
3
4
5
6
1、下载 dconf-tools:sudo apt-get install dconf-tools 
2、在终端中执行命令:dconf-editor,调出系统默认参数调整界面
gsettings get org.gnome.desktop.interface font-name

sudo dpkg-reconfigure console-setup
Debian可选字体所在的目录 /usr/share/consolefonts/

配置wsl使用系统剪切板

由于wsl子系统无法使用ubuntu下的xclip,即是安装了,复制时依然会报错 Error: Can't open display: (null)
这个问题在ubuntu论坛上有两种解决方法,但是我试了都没成功。当然,这个问题的回答给出了github上更详细的issue以及相关讨论,从中我得知linux子系统是可以执行win10系统上的二进制命令的。因此解决方案是把win10的clip.exe命令软连接到ubuntu中即可。
经过查询知道clip.exe所在的路径是 C:\Windows\System32\clip.exe,而win10的盘符是挂载在 /mnt/ 下的,因此打开ubuntu子系统,执行如下的命令即可。

1
sudo ln -s /mnt/c/Windows/system32/clip.exe /usr/bin/clip

然后就可以愉快的使用clip命令进行复制了,例如

1
ls | clip

然后可以用v模式选中待复制段落再执行:'<,'> w !clip ,即可将内容复制到win剪贴板。如果仅在wsl中使用,还有个ctrl+R后再用+的方法,见参考的s.o。

vimplus常用命令整理

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
# 常用的左下上右不多赘述hjkl,当然还有升级版的wbe等

# 高效定位
, + w # 快速跳转至屏幕范围内的单词
,, + f c # 从当前位置向下搜索屏幕范围内的字符‘c’
,, + b # 从当前位置向下搜索屏幕范围内的单词
% # 寻找与当前字符配对的单引号/双引号/小括号...
[[ # 跳到函数开头
]] # 跳到函数结尾
shift + * # 查找当前光标处的单词

# 便捷修改
,, + y # 复制当前选中到系统剪切板
>> # 增加缩进量
<< # 减少缩进量
== # 自动缩进(v模式选中后使用)
gcc # 注释本行代码
gcap # 注释函数段落
ciw # 修改当前光标位置的单词
diw # 删除当前光标位置的单词
viw # 选中当前光标位置的单词
ci' ci" ci( # 以此类推,修改被单引号/双引号/小括号包裹的内容
di' di" di( # 以此类推,删除被单引号/双引号/小括号包裹的内容
vi' vi" vi( # 以此类推,选中被单引号/双引号/小括号包裹的内容

# surround插件
ysiw' # 用单引号包裹当前光标处的整个单词(ysw'则用单引号包裹当前光标后侧的整个单词,相对少用)
ysiw( # 用小括号包裹当前光标处的整个单词(与包裹对象之间会有空格留白)
ysiw) # 用小括号包裹当前光标处的整个单词(没有空格留白) # 其余的双引号、中括号、打括号以此类推
ys3w) # 用小括号包裹当前光标后侧的3个单词(没有空格留白)
ys4l) # 用小括号包裹当前光标后侧的4个字符(没有空格留白)
ysfZ{ # 用大括号包裹当前光标至下一个‘Z’字符(有空格留白),其余数字+方向组合以此类推
cs({ # 用大括号替换当前光标外的小括号,有留白。cs(}同样功能无留白,其余符号以此类推
ds( # 删除当前光标外的小括号。其余符号以此类推

# 窗口控制
:sp [file_name] # 水平切分窗口,如果没有指定file_name则重复开启当前文件(相当于ctrl+w s)
:vsp [file_name] # 垂直切分窗口,如果没有指定file_name则重复开启当前文件(相当于ctrl+w v)
, + d # 关闭当前窗口(或者ctrl+w c)
ctrl+w r # 交换当前水平/垂直窗口的位置
ctrl+w -/+ # 缩小/扩大当前窗口高度(按完ctrl+w之后,可以紧接着按数字,一次性大幅调整高度)
ctrl+w </> # 缩小/扩大当前窗口宽度(按完ctrl+w之后,可以紧接着按数字,一次性大幅调整宽度)
ctrl+ h/j/k/l # 在当前缓冲区的几个分屏窗口之间切换
ctrl+ H/J/K/L # 将当前缓冲区的分屏窗口挪动到最左/下/上/右侧

# 缓冲区控制
:e file_name # 在新的缓冲区打开一个文件
ctrl+p/n # 切换到前/后一个缓冲区(或者:bp :bn)
, + d # 关闭当前窗口(或者:bd)

# Summary:
# A buffer is the in-memory text of a file.
# A window is a viewport on a buffer.
# 更多关于窗口和缓冲区的介绍,可以通过`:h windows.txt`命令查看

参考博客:


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!