.vimrc是什么
.vimrc是Vim配置文件配置,Vim显示行号、支持utf8中文不乱码、突出显示Vim当前行,设置高亮显示括号匹配和tab缩进,解决Vim粘贴时多出缩进和空格问题
.vimrc配置文件分系统配置和用户配置两种
系统vimrc配置文件存放在Vim的安装目录,默认路径为/usr/share/vim/vim74/vimrc_example.vim,其中 74 是版本号(不同系统版本可能存在差异)
用户vimrc文件,存放在用户主目录下~/.vimrc。可以使用命令echo $HOME确定用户主目录。
注意:用户配置文件优先于系统配置文件,Vim启动时会优先读取当前用户根目录下的.vimrc文件。所以与个人用户相关的个性化配置一般都放在~/.vimrc中
Vim基本配置
如果想自己配置,可以先将安装vim后现成的配置拷贝到用户目录下,具体命令:(注意,cp之后会导致xshell鼠标右键无法插入和选择复制,需设置 set mouse=(空的)鼠标才能右键复制)
yum install vim
cp ~/.vimrc ~/.vimrc_bak
cp /usr/share/vim/vim74/vimrc_example.vim ~/.vimrc
如上,语法高亮、代码缩进 这些喜闻乐见的特性,立刻就自动生效
基本的Vim配置选项
自己添加只要加在配置文件最后的endif之前就好,要注意的是,配置乱了的话可能会影响自己的使用习惯,所以还是那句话,这个配置适合自己的才是最好的
设置颜色主题
" 设置颜色主题
colorscheme desert
查看全部内置的颜色主题:
打开 GVim。
在命令模式下输入 :colorscheme,然后按下 Tab 键,GVim 会自动补全并列出所有可用的内置颜色主题。
PS:我试了一下,没成功。另外还可以去vim的安装目录查看内置的颜色主题,请自行百度。
以下是一份常见的 GVim 内置颜色主题列表:
blue
darkblue
delek
desert
elflord
evening
industry
koehler
morning
murphy
pablo
peachpuff
ron
shine
slate
torte
zellner
你可以在 GVim 中使用 :colorscheme <主题名称> 来切换到对应的颜色主题,例如 :colorscheme desert。
支持中文不乱码
#设置编码
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8
与Vim编码有关的变量包括:encoding、fileencoding、termencoding。
encoding选项用于缓存的文本、寄存器、Vim 脚本文件等;
fileencoding选项是Vim写入文件时采用的编码类型;
termencoding选项表示输出到终端时采用的编码类型。
显示行号
#显示行号
set nu
set number
nu是number的缩写,所以上面两个配置命令是完全等效的。
突出显示当前行
set cursorline
set cul #cursorline的缩写形式
突出显示当前列
set cursorcolumn
set cuc #cursorcolumn的缩写形式
启用鼠标
#set mouse的详细解释如下,留空可以不影响原本的鼠标右键操作
set mouse=a
set selection=exclusive
set selectmode=mouse,key
The mouse can be enabled for different modes:
n Normal mode
v Visual mode
i Insert mode
c Command-line mode
h all previous modes when editing a help file
a all previous modes
r for |hit-enter| and |more-prompt| prompt Normally you would enable the mouse in all four modes with:
:set mouse=a
When the mouse is not enabled, the GUI will still use the mousefor modeless selection. This doesn't move the textcursor.
Vim编辑器里默认是不启用鼠标的,也就是说不管你鼠标点击哪个位置,光标都不会移动。通过以上设置就可以启动鼠标,不过对于高级玩家来说,用Vim就是为了解放双方不用鼠标,所以这个设置可以根据个人爱好选择。
显示括号匹配
set showmatch
设置缩进
#设置Tab长度为4空格
set tabstop=4
#设置自动缩进长度为4空格
set shiftwidth=4
#继承前一行的缩进方式,适用于多行注释
set autoindent
Vim缩进还有更多的设置,大家可以再自行上网查找,这里不做过多叙述。
设置粘贴模式
set paste
在Vim中通过鼠标右键粘贴时会在行首多出许多缩进和空格,通过set paste可以在插入模式下粘贴内容时不会有任何格式变形、胡乱缩进等问题。
显示空格和tab键
set list
set listchars=tab:>-,trail:-
Vim编辑器中默认不显示文件中的tab和空格符,通过上面的配置可以获得以下的显示效果,方便定位输入错误。
显示状态栏和光标当前位置
#总是显示状态栏
set laststatus=2
#显示光标当前位置
set ruler
打开文件类型检测
filetype plugin indent on
两份vimrc文件仅供参考
案例1
#设置编码
set encoding=utf-8
#语法高亮
syntax on
#设置ruler会在右下角显示光标所在的行号和列号,不方便查看,改成设置状态栏显示内容
set ruler
#设置状态行显示的内容. %F: 显示当前文件的完整路径. %r: 如果readonly,会显示[RO]
#%B: 显示光标下字符的编码值,十六进制. %l:光标所在的行号. %v:光标所在的虚拟列号.
#%P: 显示当前内容在整个文件中的百分比. %H和%M是strftime()函数的参数,获取时间.
set statusline=%F%r\ [HEX=%B][%l,%v,%P]\ %{strftime(\#%H:%M\#)}
#显示行号
set nu #等同于 set number
#突出显示当前行
set cursorline #等同于 set cul
#突出显示当前列
set cursorcolumn #等同于 set cuc
#自动保存
set autowrite
#隐藏工具栏
set guioptions-=T
#隐藏菜单栏
set guioptions-=m
#光标立刻跳转到搜索到内容
set incsearch
#去掉输入错误时的提示声音
set noeb
# 默认按下Esc后,需要等待1秒才生效,设置Esc超时时间为100ms,尽快生效
set ttimeout
set ttimeoutlen=100
#在处理未保存或只读文件的时候,弹出确认
set confirm
#去掉有关vi一致性模式,避免操作习惯上的局限.
set nocompatible
# mouse=留空
set mouse=
set selection=exclusive
set selectmode=mouse,key
#高亮显示括号匹配
set showmatch
#设置Tab长度为5空格
set tabstop=5
#设置自动缩进长度为5空格
set shiftwidth=5
#不要用空格代替制表符
set noexpandtab
#显示空格和tab键
set listchars=tab:>-,trail:-
#1=启动显示状态行, 2=总是显示状态行.设置总是显示状态行,方便看到当前文件名
set laststatus=2
#打开文件类型检测,并载入文件类型插件,为特定文件类型载入相关缩进文
filetype plugin indent on
案例2
syntax on
"autoindent 自动缩进 保留上一行的缩进
set ai
"smartindent 智能缩进 保留上一行的缩进 还能识别 if for while 等语法结构
set si
"缩进的宽度
set shiftwidth=4
"制表符的宽度
set tabstop=4
"缩进时用空格代替制表符
"set expandtab
"当前行显示下划线
set cursorline
"状态栏显示光标位置
set ruler
"禁用备份文件: file~
set nobackup
set nowritebackup
"保存文件时先将原文件复制到备份文件 然后再将新的内容写入原文件
"禁用备份文件功能后无效果
set backupcopy=yes
"禁用交换文件
"交换文件用于在编辑过程中保存未保存的更改,以防 Vim 崩溃时恢复数据
"set noswapfile
"hlsearch 搜索高亮
set hls
"搜索时输入后即高亮并跳转
set incsearch
"显示匹配的括号
set showmatch
"fileencodings 文件读取时编码优先列表
set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936,latin1
"encoding vim的内部编码, 文件读取后转码成此格式进行编辑
set enc=utf-8
"fileencoding 当前文件的编码, 文件保存时以此编码进行保存
set fenc=utf-8
"启用文件类型检测、文件类型插件、文件类型缩进
filetype on
filetype plugin on
filetype indent on
"paste模式切换
nnoremap
"inoremap
"可以正常从非paste模式切换到paste模式,但是在paste模式下会禁用按键映射导致按下快捷键后无法切换回来
"number模式切换
nnoremap
inoremap
"清除当前的高亮显示
nnoremap
inoremap
"括号跳转
nnoremap
inoremap
"插入当前时间
nnoremap
inoremap
"快捷插入内容
"ab rh
"ab plh
func PersonInfo()
call setline(2, "")
call setline(3, "# ************************************************************")
call setline(4, "# Author: JiaQuanrui")
call setline(5, "# Date: ".strftime("%c"))
call setline(6, "# Filename: ".expand("%:t"))
call setline(7, "# Email: qrjia@genedenovo.com")
call setline(8, "# ************************************************************")
call setline(9, "")
endfunc
"打开文件时自动插入 代替上述快捷插入
autocmd BufNewFile *.r,*.R :call RscriptTitle()
func RscriptTitle()
if expand("%:e") == "r"|| expand("%:e") == "R"
call setline(1, "#!/public2/Bio/pipeline/Toolkit/miniconda/miniconda3/envs/R413/bin/Rscript")
call PersonInfo()
call setline(10, "library(optparse)")
call setline(11, "option_list = list(")
call setline(12, ")")
call setline(13, "parser = OptionParser(option_list = option_list)")
call setline(14, "opts = parse_args(parser)")
call setline(15, "")
call setline(16, "library(Seurat)")
call setline(17, "library(ggplot2)")
call setline(18, "library(patchwork)")
call setline(19, "library(plyr)")
call setline(20, "library(dplyr)")
call setline(21, "library(reshape2)")
call setline(22, "library(RColorBrewer)")
call setline(23, "library(rjson)")
call setline(24, "library(optparse)")
call setline(25, "source(\"/public2/Bio/pipeline/SingleCell_Collections/SCellWare/current/R/Seurat_lib.R\", chdir = T)")
call setline(26, "source(\"/public2/Bio/pipeline/SingleCell_Collections/SCellWare/current/R/Spatial_lib.R\", chdir = T)")
call setline(27, "source(\"/home/qrjia/Pipline/SingleCell/lib.r\")")
call setline(28, "")
endif
:11
endfunc
autocmd BufNewFile *.pl :call PerlTitle()
func PerlTitle()
if expand("%:e") == "pl"
call setline(1, "#!/Bio/bin/perl")
call PersonInfo()
call setline(10, "use strict;")
call setline(11, "use warnings;")
call setline(12, "use Getopt::Long;")
call setline(13, "use YAML::Syck;")
call setline(14, "use Data::Dumper;")
call setline(15, "use Cwd qw/abs_path/;")
call setline(16, "use File::Path qw/make_path/;")
call setline(17, "")
endif
:$
endfunc
autocmd BufNewFile *.py :call PythonTitle()
func PythonTitle()
if expand("%:e") == "py"
call setline(1, "#!/home/qrjia/anaconda3/bin/python3")
call PersonInfo()
call setline(10, "# coding=utf-8")
call setline(11, "import argparse")
call setline(12, "parser = argparse.ArgumentParser(description=\"\")")
call setline(13, "parser.add_argument(\"\")")
call setline(14, "args = parser.parse_args()")
call setline(15, "")
call setline(16, "import sys")
call setline(17, "import re")
call setline(18, "import glob")
call setline(19, "import os")
call setline(20, "import gzip")
call setline(21, "import shutil")
call setline(22, "import datetime")
call setline(23, "import logging")
call setline(24, "")
endif
:12
endfunc
参考资料
https://mp.weixin.qq.com/s/nuWvbRPn5agqaTlkuauOAA
https://mp.weixin.qq.com/s/xW8baSrqGVYkmIxH23Z9NA

