好用的vim配置

好用的vim配置

配置文件

vim配置文件,用vim打开~/.vimrc文件,先在底行模式设置:set paste,即设置为粘贴模式,然后把下面的配置粘贴进去保存,再设置回非粘贴模式:set nopaste即可:

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""vim实用配置: https://www.xiebruce.top/594.html"""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
syntax on           "语法高亮
"退格键默认删除光标所在字符,但这样感觉怪怪的,所以我们可以设置它删除光标所在字符的前一个字符,看起来更符合直观的印象
set backspace=2
set number          "显示行号,可简写为:set nu,取消:set nonu
set cursorline      "光标所在行显示一条下划线
set hlsearch        "高亮显示查询出来的结果
set incsearch       "搜索的时候逐字高亮匹配
set ruler           "光标移动时,编辑器底部显示当前行号与列号
set nocompatible    "不使用vi兼容模式
set autoread        "文件改动时自动载入
set tabstop=4       "一个tab所占列数
set softtabstop=4   "敲入tab键时实际占有的列数
set expandtab       "设置用空格代替tab
set shiftwidth=4    "底行模式下用:n,m>或:n,m<缩进时,缩进的列数
set t_Co=256        "terminal Color 支持256色(默认是8色)
hi comment ctermfg=6 "设置注释颜色

"解决vim中文乱码问题
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8

set smartindent "智能缩进(好处是修改代码时会根据代码规则自动缩进,坏处是当用`:n,m>`对齐左侧的注释将不会被移动)
"set autoindent "自动缩进(这两个差不多,感觉在大括号自动配对时,用智能缩进好点)

"自动补全单/双引号、圆、中、大括号
inoremap ' ''<ESC>i
inoremap " ""<ESC>i
inoremap ( ()<ESC>i
inoremap [ []<ESC>i
inoremap { {<CR>}<ESC>O

关于tabstop和softtabstop

tabstop:定义一个tab符号占用的列数(注意是tab符号,不是tab键,按一下tab键并不一定生成一个tab符号,这要看softtabstop的值)。
softtabstop:tab下键键后,实际占用的列数(缩进的列数)。

如果设置了expandtab:输入一个tab,将被展开成softtabstop值个空格,如果softtabstop=4,那么一个tab就会被替换成4个空格。

如果未设置expandtab:
1. softtabstop大于tabstop时,比如softtabstop=6,tabstop=4,那么按一下tab键,光标将会缩进6列,且其中4列会变成一个tab符号(因为tabstop=4),而另外两个空格由于不满一个tab,还是直接显示空格,如果按两下tab键,则会输入12列,由于12个空格刚好是3个tabstop(即3个4),所以这12个空格会被转成3个tab符号。
2. softtabstop小于tabstop时,如果softtabstop=4,tabstop=8,输入一个tab(softtabstop),会变成4个空格(因为不够用一个tabstop表示),输入两个tab会变成一个tab(8列)
3. 当softtabstop等于tabstop,比如两者都等于4,则按一下tab键就会占用(缩进)4列(这个4是softtabstop的值),并且由于tabstop也等于4,所以这4列刚好转换成一个tab符号。

总结:按一下tab键会输入softtabstop列,如果未设置expandtab,那么这softtabstop列每满一个tabstop,那么就会转成一个tab符号,不满的就用空格占位,如果设置了expandtab,那么这些空格就保持空格状态,不会转成tab符号。

注意保存后,不需要用source读入,否则会报错,因为你使用vim的时候(比如用vim打开一个文件,它就会自动载入.vimrc中的配置。双引号是注释符号,所以无需先删除中文注释。

井号开头注释无法右移问题

我们知道,vim是可以在底行模式下使用:n,m>表示把第n行到第m行之间(含n和m行)的所有行向右移动一个tab的距离(>),当然也可以移动两个tab(>>),即要移动几个tab就加几个大于号,当然也可以向左侧移,把大于号换成小于号即可。

现在我们打算把下图的第17-36行向右移动一个tab,下图是移动前的原状态:
Xnip2019-07-08_21-55-29.jpg

使用:17,36>向右移动一个tab后的状态:
Xnip2019-07-08_21-56-20.jpg

很明显,你肯定发现了带#号的注释没有被移动,这就是设置了set smartindent参数后的缺点,如果不设置这个smartindent则不会有这个问题,而且这个缺点只会发生在带#的注释顶到了左侧(左侧已经没有空格了),如果未顶到左侧,则向右移动不会有这个问题。

当然,smartindent的好处就是在你使用vim修改代码时会自动根据代码语法缩进,例如你写个if(xxx) {,然后按回车换行,它就会自动在新行给你缩进一个tab,这个功能在随便一个编辑器都是非常正常的功能,没有这个功能才奇怪呢,但是在vim里就必须要这么设置才行。

前景色

hi comment ctermfg=6中,hi是highlight(高亮)的意思,因此,还可以写成:

highlight comment ctermfg=6

ctermfg,term是terminal(终端),fg是foreground(前景色,即文字颜色),与此对应的有bg(background,背景色),而6是色号。

如果你要知道都有哪些色号及其对应的颜色,执行下面的两个命令即可显示(安装oh-mh-zsh后才会有这两个命令):
显示前景色:

spectrum_ls

显示背景色:

spectrum_bls

直接在终端执行以上两个命令的任意一个即可显示出256色的色值表,当然如果你只是想看颜色对应的颜号,请直接看本文最后,我已经把我执行的结果截图粘上来了。

未配置
未配置.gif

配置后
配置后.gif

256色色值表(每个格子左下角的三位数即为色值,而中间的是16进制色值,我们要填的是3位数的色值,16进制色值只是标明是什么颜色):
Xterm_256color_chart.svg

打赏

Leave a Reply

avatar

This site uses Akismet to reduce spam. Learn how your comment data is processed.

  Subscribe  
Notify of

扫码在手机查看
iPhone请用自带相机扫
安卓用UC/QQ浏览器扫

好用的vim配置