概述
" 1、
" 为了可以重新执行 vimrc,开头先清除当前组的自动命令
if has('autocmd')
" 为了可以重新执行 vimrc,开头先清除当前组的自动命令
au!
endif
" 2、
" 图形界面的字体配置
" 如果图形界面在运行的话。
if has('gui_running')
" 下面两行仅为占位使用,可以填入自己的字体,第二行的是设置宽字符字体,比如中文字体(根据需要直接百度或者通过命令:"helpgui-font"直
" 接查看有哪些字体)
set guifont=
set guifontwide=
" 在菜单中显示文件类型(如果是终端打开vim是看不出菜单的,有没有菜单都无所谓)
" 不管有没有该语句,输入":emenu [tab]"也是可以显示出菜单的,而且里面也有语法选项,
" 也可以查看全部的语法。
let do_syntax_sel_menu = 1
" 不延迟加载菜单(需要放在下面的 source 语句之前,终端打开的vim是没有菜单的,所以
" 终端打开看不出什么效果)
let do_no_lazyload_menus = 1
endif
" 3、
" 设置编辑文件的内码,对于现在类Unix的vim8来说可以省略,但如果是Window系统,最好还是加上。
set enc=utf-8
" 4、
" 导入vim示例配置,VIMRUNTIME我估计应该是配置的一个环境变量。
source $VIMRUNTIME/vimrc_example.vim
" 5、
" 启用 man 插件
" 光标在vim的某个关键字中,按大写K可以打开man帮助文档界面进行查看。
source $VIMRUNTIME/ftplugin/man.vim
set keywordprg=:Man
" 6、
" 设置tags文件的搜索路径
" 加入记录系统头文件的标签文件和上层的 tags 文件
set tags=./tags,../tags,../../tags,tags,/usr/local/etc/systags
" 7、
" 设置vim的语系解码的顺序,如果是在Linux环境下,一直使用UTF-8,这个设置有没有无所谓
" 以下解码的顺序的说明如下:
" 首先,检查文件是不是有 Unicode 的 BOM(字节顺序标记)字符,有的话按照 BOM 字符来转换文件内容。
" 其次,检查文件能不能当作 UTF-8 来解码;如果可以,就当作 UTF-8 来解释。
" 最后,如果上面的解码都不成功,就按 Latin1 字符集来解码;由于这是单字节的编码,转换必定成功。
set fileencodings=ucs-bom,utf-8,gb18030,latin1
" 8、
" 屏幕滚动设置
" 屏幕滚动设置主要是影响一般命令模式下的H命令和L命令,H命令功能是光标移动到最上面,但如果scrolloff=5的话,H命令就变成了6H命令,即会移动到
" 屏幕上方的第六行,这就改变了原来的含义了,同理L也是如此,因此屏幕滚动设置可以是0,也可以是1。
set scrolloff=0
" 9、
" 备份和撤销文件
" 每次进行编辑的时候会备份上一次的文件,备份文件的文件名相比于原文件的文件名结尾会多一个~。
" set backup
" 一般大佬会如下进行配置:
" 将备份直接关闭
set nobackup
" 如果vim版本支持undo的话,即支持撤销文件
if has('persistent_undo')
" vim在重新打开一个文件时仍然可以撤销之前的编辑,这个记录了操作历史信息的撤销文件会保存到一个开头是.,结尾是.un~的文件中
set undofile
" 将撤销文件保留在目录(~/.vim/undodir)中,并将这个目录字符串赋值undodir变量
" 这样设置会使撤销文件保存到指定的目录
set undodir=~/.vim/undodir
" 设置自动创建撤销文件目录(~/.vim/undodir)
" isdirectory()是一个函数,作用是判断一个目录是否存在,存在返回true,不存在返回false
if !isdirectory(&undodir)
" &undodir 代表 undodir 这个变量的值。
" call语句简单的说是用来调用一个函数的,后面跟函数名和相关的参数。
" mkdir()函数可以用来创建一个目录,下面第一个参数是目录,第二个参数'p'我觉得是递归创建需要的参数,第三个选项是创建之
" 后这个目录的权限,有点类似于命令行模式下的mkdir命令。
call mkdir(&undodir, 'p', 0700)
endif
endif
" 10、
" 设置vim不需要和vi兼容,Unix上的vim8可以去掉,Windows系统上也可以去掉。
set nocompatible
" 11、
" 对鼠标支持进行设置(可以使用鼠标在vim中进行光标的移动,滑动鼠标进入可视模式进行文本选择)
" 检查当前vim版本是否支持鼠标,可以在命令行模式,通过命令(vim --version)查看对应的mouse项前面是否有加号,是一种方式。
if has('mouse')
" 如果图形界面正在运行,终端是xtermk兼容,但不是mac的时候,因为不一定是所有的mac都支持xterm。
if has('gui_running') || (&term =~ 'xterm' && !has('mac'))
" 启用完全的鼠标支持,a我猜是对应all的简写,也就是所有权限的意思,如果在vim的所有模式中使用鼠标滑动时会进入可视模式,
" 这时是不能将文本从vim中复制出去粘贴到vim之外的文件的,但是如果是xterm模式的话,可以通过按住键盘上的shift键不放手,
" 之后滑动鼠标选择要进行复制的内容,之后右键进行复制就可以了,一定要按住shift键不放手。
" 开启了鼠标支持之后如果使用分割命令将vim分割成多个窗口,可以直接用鼠标拖动的方式改变每个窗口的大小。非常的方便。
set mouse=a
else
" nvi分别是是一般命令模式、可视模式和插入模式的简写,对于不支持xterm模式,一旦设置了mouse=a的话,那么我在vim中的所有模式中滑动鼠标,
" 都会进入可视模式,从而永远不能将vim打开的文件中把一些信息复制出去,所以不能将vim中所有的模式都设置鼠标支持,一般可以将命令行模式不
" 设置鼠标支持,其他的像一般命令模式、可视模式和插入模式都设置鼠标支持就行,这样就可以通过":"键进入命令行模式,从而可以将vim打开的文
" 件中将文本复制出去了。具体的mouse参数设置可以在命令行输入(:help mouse)进行查看。
set mouse=nvi
endif
endif
" 12、
" 使用minpac这个包管理器(管理下载的插件/软件包)
if exists('*minpac#init')
" Minpac is loaded.
call minpac#init()
call minpac#add('k-takata/minpac', {'type': 'opt'})
" Other plugins
" 你肯定遇见过文件需要更名或者移动吧。这当然很简单,你可以通过图形界面或命令行进行操作。但这样操作之
" 后,有一个问题是 Vim 的撤销历史跟文件就再也对不上了,你也没法再继续撤销更名或移动前的编辑操作了。有
" 一个 Vim 插件,也是 Tim Pope 写的 tpope/vim-eunuch,可以解决这个问题。事实上,这个插件的功能远不止更
" 名和移动。它实际上是把 Unix 的很多命令行工具搬到了 Vim 里(比较一下 Unix 和 eunuch 的发音你就知道这个
" 插件的名字是什么意思了)。对我来说,最重要的就是它提供的 :Rename 和 :Move 命令,后面跟的参数就是新的
" 名字或路径。这样操作之后,以后再打开这个更名或移动后的文件,仍然能够访问它的一切编辑历史。
call minpac#add('tpope/vim-eunuch')
" 文本对象增强的插件,其可以实现的功能如下:
" 在一个单词的外面加上引号,如把 word 变成 "word",可以使用命令 ysiw"。
" 把一个单词的外面的双引号变成单引号(有强迫症的 Python程序员很可能有这样的需求),如把 "word" 变成 'word',
" 可以使用命令 cs"'。
" 把外面的引号或括号变成 HTML 标签也没有问题,如把 [my choice] 变成 <em>mychoice</em>,可以使用命令 cs[<em>。
" 可视模式也有类似的命令,如可以在选中 my choice 后,输入 S<em> 把文本变成<em>my choice</em>。
" 当然,你也可以把加上的包围符号移除,命令是 ds 后面跟包围符号,如 ds" 可以移除外围的双引号;要移除 HTML 标签
" 则使用 t 来表达,即使用 dst 来移除文本外面的第一个 HTML 标签
call minpac#add('tpope/vim-surround')
" 让用户自定义命令重复使用的插件。
" 注意 Vim 命令 . 只能用来重复 Vim 的内置命令,而不能用来重复上面这样的用户自定义命令。为了解决这个问题,我也
" 会安装 tpope/vim-repeat 插件,使得重复自定义用户的命令能够生效。
call minpac#add('tpope/vim-repeat')
" yegappan/mru插件可以在图形界面的菜单中查看最近使用的文件。如果是终端打开的vim
" 是看不出什么效果的。如果是使用远程连接,不能使用图形界面,需要进行以下配置才
" 可以在终端中查看最近使用的文件。
call minpac#add('yegappan/mru')
" 目录树插件
" 以下是关于目录树的按键操作:
" I键:开启和关闭隐藏文件显示
" i键:打开一个文件到水平分割窗口
" s键:打开一个文件到竖直分割窗口
" t键:打开一个文件到一个新的标签页
" 一般命令模式输入【:NERDTreeToggle】可打开目录树,可以设置快捷键。
call minpac#add('preservim/nerdtree')
" tagbar插件
" Ctags 是一个可以从源代码中提取符号的工具。Vim 的插件 tagbar 就可以利用 Ctags 来提取符号,
" 生成源代码的结构图。只要 Ctags 能支持这种语言,插件就能“识别” 这种语言,来生成结构图;识
" 别的好坏程度也视 Ctags对其的支持程度而定。在使用tagbar插件之前要在github上先下载universal ctags。
" 可以对tagbar插件进行快捷键设置,用以快速打开和关闭tagbar窗口。
call minpac#add('majutsushi/tagbar')
" asyncrun.vim插件
" 可以支持异步任务,针对于命令【:make】、【:grep】等vim内部命令,在这些命令执行时可以做其他的
" 事情,需要进行一定的配置
call minpac#add('skywind3000/asyncrun.vim')
" 知道文件名或其中的关键部分,但不知道或不关心文件在哪里。这种情况下,可以使用Fzf的模糊匹配来
" 查找文件。在使用该插件的时候需要下载fzf软件。
" 通过在一般命令行模式输入【:Files<CR>】之后输入关键字就可以进行模糊查询了。
call minpac#add('junegunn/fzf', {'do': {-> fzf#install()}})
call minpac#add('junegunn/fzf.vim')
" 撤销树插件
" Vim 不仅支持多级撤销,而且有撤销树的概念。利用撤销树,你可以转回到编辑中的任何一个历史状态。不过,
" 问题是,Vim 用来管理撤销树的命令不那么直观。
" 著名的撤销树插件有两个,一个是 mbbill/undotree,一个是 sjl/gundo.vim。两者功能相似,界面风格和快捷
" 键有所不同。下面使用功能更加丰富的undotree。可以通过快捷键设置开关撤销树。
call minpac#add('mbbill/undotree')
endif
" 对包管理器minpac进行命令配置
if has('eval')
" Minpac commands
command! PackUpdate packadd minpac | source $MYVIMRC | call minpac#update('', {'do': 'call minpac#status()'})
command! PackClean
packadd minpac | source $MYVIMRC | call minpac#clean()
command! PackStatus packadd minpac | source $MYVIMRC | call minpac#status()
" asyncrun.vim插件配置在执行内置命令【:make】时可以做其他事情
" 和 asyncrun 一起用的异步 make 命令
" 下面的命令会使用 makeprg 选项。不过,还有个问题是默认情况下屏幕上看不到执行过程的信息。
" 我们可以让 asyncrun 在执行命令时立即打开 quickfix窗口,可以设置quickfix窗口的大小,设置
" 语句在下面。
command! -bang -nargs=* -complete=file Make AsyncRun -program=make @ <args>
endif
" yegappan/mru插件远程连接的相关配置。
" 下面的配置中按下F2,之后按tab键就可以看到最近使用的文件有哪些了。
if !has('gui_running')
" 设置文本菜单
if has('wildmenu')
set wildmenu
set cpoptions-=<
set wildcharm=<C-Z>
nnoremap <F2>
:emenu <C-Z>
inoremap <F2> <C-O>:emenu <C-Z>
endif
endif
" 13、
" 对Vim 8.0.0210之前的版本手工配置括号粘贴模式,由于该版本之后的vim大多数
" 兼容xterm,以及引入了括号粘贴模式,所以以下代码变得不重要了。
if !has('patch-8.0.210')
" 进入插入模式时启用括号粘贴模式
let &t_SI .= "<Esc>[?2004h"
" 退出插入模式时停用括号粘贴模式
let &t_EI .= "<Esc>[?2004l"
" 见到 <Esc>[200~ 就调用 XTermPasteBegin
inoremap <special> <expr> <Esc>[200~ XTermPasteBegin()
function! XTermPasteBegin()
" 设置使用 <Esc>[201~ 关闭粘贴模式
set pastetoggle=<Esc>[201~
" 开启粘贴模式
set paste
return ""
endfunction
endif
" 14、
" 在图形界面的vim8中,开启在文件已经打开时自动切换到已经打开的 Vim窗口上。
" 这个功能在文件处于一个不活跃的标签页时特别有用,因为 Vim 能把这个标签页自动
" 切到最前面。
if v:version >= 800
packadd! editexisting
endif
" 15、
" 各个功能的快捷键设置
" nnoremap是正常模式使用的按键映射,inoremap是插入模式下使用的按键映射。
" 切换窗口的键映射
" 切换到下面窗口
noremap <C-j> <C-W>j
" 切换到上面窗口
noremap <C-k> <C-W>k
" 切换到左面窗口
noremap <C-h> <C-W>h
" 切换到右面窗口
noremap <C-l> <C-W>l
" 停止搜索高亮的键映射
" 在一般命令模式和插入模式中按F2,即可设置取消高亮。
nnoremap <silent> <F3>
:nohlsearch<CR>
inoremap <silent> <F3> <C-O>:nohlsearch<CR>
" nerdtree目录树插件快捷键设置
" 设置打开目录树快捷键F7
nnoremap <F7> :NERDTreeToggle<CR>
" 开关撤销树的键映射
nnoremap <F6>
:UndotreeToggle<CR>
inoremap <F6> <C-O>:UndotreeToggle<CR>
" tagbar快捷键的设置
nnoremap <F9>
:TagbarToggle<CR>
nnoremap <F9> <C-O>:TagbarToggle<CR>
" 用于 quickfix、标签和文件跳转的键映射
" Vim 里有一种特殊类型的窗口,被称作 quickfix(快速修复)。这个窗口中会展示外部
" 命令的结果,并可以通过这个窗口中的内容直接跳转到特定文件的特定位置。这个设计
" 最初是用来加速“编辑 - 编译 - 编辑”这个循环的,但它的实际用处并不只是用来编译程序。
" 如果你的代码可以简单执行 make 来编译的话(也就是说,你已经写了或者生成了合适的 Makefile),
" 你可以尝试直接在 Vim 里执行 :make。你会看到正常的执行过程。唯一不一样的地方是,
" 如果编译失败了,Vim 会自动跳转到第一个出错的位置!如果使用 :copen 命令,我们就
" 可以打开 quickfix 窗口。在里面我们可以看到完整的出错信息,并能通过颜色看出 Vim
" 解析了文件名和行号。我们在带文件名的行上双击即可跳转到对应位置。
" 设置ctrl + n在一般命令模式下查看下一处错误
nmap <C-n>
:cn<CR>
" 设置ctrl + p在一般命令模式下查看上一处错误
nmap <C-p>
:cp<CR>
" 设置ctrl + o在一般命令模式下打开quickfix窗口
nmap <C-o> :copen<CR>
" 设置ctrl + o在一般命令模式下关闭quickfix窗口
nmap <C-c> :cclose<CR>
" 替换光标下单词的键映射
" viw表示可视模式下选中一个单词,然后将其粘贴为最近复制过的一个内容(可以是dd命令
" 删除的内容,也可以是y命令复制的内容)。一般模式下和可视模式都设置为【v】。
nnoremap <Leader>v viw"0p
vnoremap <Leader>v
"0p
" asyncrun.vim插件快捷键设置
" 对于 C/C++程序员来讲,启动和停止构建是一个很频繁的操作。所以,给它分配了一个快捷键F5
" 映射按键来快速启停构建
nnoremap <F5>
:if g:asyncrun_status != 'running'<bar>
if &modifiable<bar>
update<bar>
endif<bar>
exec 'Make'<bar>
else<bar>
AsyncStop<bar>
endif<CR>
" 16、
" 设置一些自动命令
if has('autocmd')
function! GnuIndent()
setlocal cinoptions=>4,n-2,{2,^-2,:2,=2,g0,h2,p5,t0,+2,(0,u0,w1,m1
setlocal shiftwidth=2
setlocal tabstop=8
endfunction
" asyncrun 在执行命令时立即打开 quickfix窗口,可以设置quickfix窗口的大小。
" 异步运行命令时打开 quickfix 窗口,高度为 10 行
let g:asyncrun_open = 10
au FileType c,cpp,objc
setlocal expandtab shiftwidth=4 softtabstop=4 tabstop=4 cinoptions=:0,g0,(0,w1
au FileType json
setlocal expandtab shiftwidth=2 softtabstop=2
au FileType vim
setlocal expandtab shiftwidth=2 softtabstop=2
au FileType help
nnoremap <buffer> q <C-W>c
au BufRead /usr/include/*
call GnuIndent()
endif
最后
以上就是怕孤独灰狼为你收集整理的极客网《vim必知会》讲解的vim配置的全部内容,希望文章能够帮你解决极客网《vim必知会》讲解的vim配置所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复