阅读模式:

vim的配置

查看:6135  回复:0  类型:  来源:php自学网  标签 linux centos

        vim的配置,配置文件目录/root/.vimrc,通过修改这个文件对vim的显示行号、设置文件编码、自动换行、代码高亮、显示字体、代码缩进等一系列的设置,如果没有这个文件可以进行创建。

vim /root/.vimrc
"====================基本设置
set Autochdir "自动设置当前目录为正在编辑的目录
set Hidden "自动隐藏没有保存的缓冲区,切换buffer时不给出保存当前buffer的提示
set Scrolloff=5 "在光标接近底端或顶端时,自动下滚或上滚
"Toggle Menu and Toolbar "隐藏菜单栏和工具栏
"set Guioptions-=m
"set Guioptions-=T
set Showtabline=2 "设置显是显示标签栏
set Autoread "设置当文件在外部被修改,自动更新该文件
set Mouse=a "设置在任何模式下鼠标都可用
set Nobackup "设置不生成备份文件
set smartindent "智能对齐
set autoindent "设置自动对齐
"set ai! "设置自动缩进

set helplang=cn "设置中文帮助
set history=500 "保留历史记录
set backspace=2 "设置退格键可用

set fileencoding=utf-8
set fileencodings=utf-8,gb18030,utf-16,big5

set bufhidden=hide
set showmatch "设置匹配模式,相当于括号匹配
setlocal noswapfile"不要生成swap文件,当buffer被丢弃的时候隐藏它

" 自动换行
set  wrap
" 禁止折行
"set nowrap
set linebreak "整词换行,与自动换行搭配使用

" 关闭兼容模式
set nocompatible

" vim 自身命令行模式智能补全
set wildmenu

" 开启行号显示
set number

" 总是显示状态栏
set laststatus=2

set statusline=[%F]%y%r%m%*%=[Line:%l/%L,Column:%c][%p%%] "显示文件名:总行数,总的字符数


" 开启语法高亮功能
syntax enable
" 允许用指定语法高亮配色方案替换默认方案
syntax on

" 开启文件类型侦测
filetype on
" 根据侦测到的不同类型加载对应的插件
filetype plugin on
" 自适应不同语言的智能缩进
filetype indent on

" 开启实时搜索功能
set incsearch
" 搜索时大小写不敏感
set ignorecase
" 高亮显示搜索结果
set hlsearch

" 配色方案
"set background=dark
"colorscheme solarized
"colorscheme molokai
"colorscheme phd

" 高亮显示当前行/列
"set cursorline
"set cursorcolumn

" 显示光标当前位置
set ruler

" 禁止光标闪烁
set gcr=a:block-blinkon0

" 禁止显示滚动条
set guioptions-=l
set guioptions-=L
set guioptions-=r
set guioptions-=R
" 禁止显示菜单和工具条
set guioptions-=m
set guioptions-=T

" 基于缩进或语法进行代码折叠
"set foldmethod=indent
set foldmethod=syntax
" 启动 vim 时关闭折叠代码
set nofoldenable


" 将制表符扩展为空格
set expandtab
" 设置编辑时制表符占用空格数
set tabstop=4
" 设置格式化时制表符占用空格数
set shiftwidth=4
" 让 vim 把连续数量的空格视为一个制表符
set softtabstop=4

" 设置 gvim 显示字体
"set guifont=YaHei\ Consolas\ Hybrid\ 11.5
set guifont=Courier_New:h11 "字体设置: 字体中间有空格的话,用下划线表示空格。:号后边表示选项


"====================vim 自身(非插件)快捷键
" 定义快捷键的前缀,即 <Leader>
let mapleader=";"
" 定义快捷键到行首和行尾
"nmap lb 0
nmap 1 $

" 设置快捷键将选中文本块复制至系统剪贴板
"vnoremap <Leader>y "+y
" 设置快捷键将系统剪贴板内容粘贴至vim
"nmap <Leader>p "+p

" 定义快捷键关闭当前分割窗口
nmap <Leader>q :q<CR>
" 定义快捷键保存当前窗口内容
nmap <Leader>w :w<CR>
" 定义快捷键保存所有窗口内容并退出 vim
nmap <Leader>waq :wa<CR>:q<CR>
" 不做任何保存,直接退出 vim
nmap <Leader>qae :qa!<CR>

" 设置快捷键遍历子窗口
" 依次遍历
nnoremap <Leader>ww <C-W><C-W>
" 跳转至右方的窗口
nnoremap <Leader>wl <C-W>l
" 跳转至方的窗口
nnoremap <Leader>wh <C-W>h
" 跳转至上方的子窗口
nnoremap <Leader>wk <C-W>k
" 跳转至下方的子窗口
nnoremap <Leader>wj <C-W>j

" 定义快捷键在结对符之间跳转,助记 pair
nmap <Leader>pa %


" <<

" 插件管理
" 将 pathogen 自身也置于独立目录中,需指定其路径
runtime bundle/pathogen/autoload/pathogen.vim
" 运行 pathogen
execute pathogen#infect()


" 将外部命令 wmctrl 控制窗口最大化的命令行参数封装成一个 vim 的函数
fun! ToggleFullscreen()
    call system("wmctrl -ir " . v:windowid . " -b toggle,fullscreen")
endf
" 全屏开/关快捷键
nmap <silent> <Leader>full :call ToggleFullscreen()<CR>
" 启动 vim 时自动全屏
"autocmd VimEnter * call ToggleFullscreen()



" <<

" >>
" 其他美化



" 设置状态栏主题风格
"let g:Powerline_colorscheme='solarized256'


" <<

" >>
" 缩进


" 缩进可视化插件 Indent Guides
" 随 vim 自启动
let g:indent_guides_enable_on_vim_startup=1
" 从第二层开始可视化显示缩进
let g:indent_guides_start_level=2
" 色块宽度
let g:indent_guides_guide_size=1
" 快捷键 i 开/关缩进可视化
nmap <silent> <Leader>i <Plug>IndentGuidesToggle



" <<

" >>
" 接口与实现快速切换

" *.cpp 和 *.h 间切换
nmap <Leader>ch :A<CR>
" 子窗口中显示 *.cpp 或 *.h
nmap <Leader>sch :AS<CR>

" <<

" >>
" 代码收藏

" 自定义 vim-signature 快捷键
let g:SignatureMap = {
        \ 'Leader'             :  "m",
        \ 'PlaceNextMark'      :  "m,",
        \ 'ToggleMarkAtLine'   :  "m.",
        \ 'PurgeMarksAtLine'   :  "m-",
        \ 'DeleteMark'         :  "dm",
        \ 'PurgeMarks'         :  "mda",
        \ 'PurgeMarkers'       :  "m<BS>",
        \ 'GotoNextLineAlpha'  :  "']",
        \ 'GotoPrevLineAlpha'  :  "'[",
        \ 'GotoNextSpotAlpha'  :  "`]",
        \ 'GotoPrevSpotAlpha'  :  "`[",
        \ 'GotoNextLineByPos'  :  "]'",
        \ 'GotoPrevLineByPos'  :  "['",
        \ 'GotoNextSpotByPos'  :  "mn",
        \ 'GotoPrevSpotByPos'  :  "mp",
        \ 'GotoNextMarker'     :  "[+",
        \ 'GotoPrevMarker'     :  "[-",
        \ 'GotoNextMarkerAny'  :  "]=",
        \ 'GotoPrevMarkerAny'  :  "[=",
        \ 'ListLocalMarks'     :  "ms",
        \ 'ListLocalMarkers'   :  "m?"
        \ }

" <<

" >>
" 代码导航
 
" 基于标签的代码导航

" 设置插件 indexer 调用 ctags 的参数
" 默认 --c++-kinds=+p+l,重新设置为 --c++-kinds=+l+p+x+c+d+e+f+g+m+n+s+t+u+v
" 默认 --fields=+iaS 不满足 YCM 要求,需改为 --fields=+iaSl
let g:indexer_ctagsCommandLineOptions="-R --languages=c,c++ --c-kinds=+p --c++-kinds=+l+p+x+c+d+e+f+g+m+n+s+t+u+v --fields=+iaSl --extra=+q"

" 正向遍历同名标签
nmap <Leader>tn :tnext<CR>
" 反向遍历同名标签
nmap <Leader>tp :tprevious<CR>

" 基于语义的代码导航

nnoremap <leader>jd :YcmCompleter GoToDeclaration<CR>
" 只能是 #include 或已打开的文件
nnoremap <leader>je :YcmCompleter GoToDefinition<CR>
nnoremap <leader>ye :YcmDiags<CR>

" <<

" >>
" 标签列表

" 设置 tagbar 子窗口的位置出现在主编辑区的左边
let tagbar_left=1
" 设置显示/隐藏标签列表子窗口的快捷键。速记:tag list
nnoremap <Leader>tl :TagbarToggle<CR>
" 设置标签子窗口的宽度
let tagbar_width=32
" tagbar 子窗口中不显示冗余帮助信息
let g:tagbar_compact=1
" 设置 ctags 对哪些代码元素生成标签
let g:tagbar_type_cpp = {
     \ 'ctagstype' : 'c',
     \ 'kinds'     : [
         \ 'd:macros:1',
         \ 'g:enums',
         \ 't:typedefs:0:0',
         \ 'e:enumerators:0:0',
         \ 'n:namespaces',
         \ 'c:classes',
         \ 's:structs',
         \ 'u:unions',
         \ 'f:functions',
         \ 'm:members:0:0',
         \ 'v:global:0:0',
         \ 'x:external:0:0',
         \ 'l:local:0:0'
     \ ],
     \ 'sro'        : '::',
     \ 'kind2scope' : {
         \ 'g' : 'enum',
         \ 'n' : 'namespace',
         \ 'c' : 'class',
         \ 's' : 'struct',
         \ 'u' : 'union'
     \ },
     \ 'scope2kind' : {
         \ 'enum'      : 'g',
         \ 'namespace' : 'n',
         \ 'class'     : 'c',
         \ 'struct'    : 's',
         \ 'union'     : 'u'
     \ }
\ }

" <<

" 模板补全
" UltiSnips 的 tab 键与 YCM 冲突,重新设定
"let g:UltiSnipsSnippetDirectories=["mysnippets"]
let g:UltiSnipsExpandTrigger="<leader><tab>"
let g:UltiSnipsJumpForwardTrigger="<leader><tab>"
let g:UltiSnipsJumpBackwardTrigger="<leader><s-tab>"

" >>
" YCM 补全

" YCM 补全菜单配色
" 菜单
highlight Pmenu ctermfg=2 ctermbg=3 guifg=#005f87 guibg=#EEE8D5
" 选中项
highlight PmenuSel ctermfg=2 ctermbg=3 guifg=White guibg=grey20 
highlight YcmErrorLine guibg=#EEE8D5
highlight SyntasticErrorLine guibg=#EEE8D5

" 补全功能在注释中同样有效
let g:ycm_complete_in_comments=1

" 允许 vim 加载 .ycm_extra_conf.py 文件,不再提示
let g:ycm_confirm_extra_conf=0

" 开启 YCM 标签补全引擎
let g:ycm_collect_identifiers_from_tags_files=1
" 引入 C++ 标准库 tags
set tags+=/data/misc/software/app/vim/stdcpp.tags
set tags+=/usr/include/sys.tags

" YCM 集成 OmniCppComplete 补全引擎,设置其快捷键
inoremap <leader>; <C-x><C-o>

" 补全内容不以分割子窗口形式出现,只显示补全列表
set completeopt-=preview

" 从第一个键入字符就开始罗列匹配项
let g:ycm_min_num_of_chars_for_completion=1

" 禁止缓存匹配项,每次都重新生成匹配项
let g:ycm_cache_omnifunc=0

" 语法关键字补全
let g:ycm_seed_identifiers_with_syntax=1

let g:clang_library_path='/root/.vim/bundle/YouCompleteMe/third_party/ycmd'
" <<
 
" 静态分析器 syntastic 错误标识
let g:syntastic_error_symbol = '✗'
let g:syntastic_warning_symbol = '⚠'

" >>
" 由接口快速生成实现框架

" 设置 pullproto.pl 脚本路径
let g:protodefprotogetter='~/.vim/bundle/vim-protodef/pullproto.pl'

" 成员函数的实现顺序与声明顺序一致
let g:disable_protodef_sorting=1

" <<

" >>
" 库信息参考
 
" 启用:Man命令查看各类man信息
source $VIMRUNTIME/ftplugin/man.vim

" 定义:Man命令查看各类man信息的快捷键
nmap <Leader>man :Man 3 <cword><CR>

" <<

" >>
" 工程文件浏览

" 使用 NERDTree 插件查看工程文件。设置快捷键,速记:file list
nmap <Leader>fl :NERDTreeToggle<CR>
" 设置 NERDTree 子窗口宽度
let NERDTreeWinSize=22
" 设置 NERDTree 子窗口位置
let NERDTreeWinPos="right"
" 显示隐藏文件
let NERDTreeShowHidden=1
" NERDTree 子窗口中不显示冗余帮助信息
let NERDTreeMinimalUI=1
" 删除文件时自动删除文件对应 buffer
let NERDTreeAutoDeleteBuffer=1

" <<

" >>
" 多文档编辑
 
" 显示/隐藏 MiniBufExplorer 窗口
"map <Leader>bl :MBEToggle<cr>

" buffer 切换快捷键
"map <C-Tab> :MBEbn<cr>
"map <C-S-Tab> :MBEbp<cr>

" <<


" >>
" 环境恢复

" 设置环境保存项
set sessionoptions="blank,globals,localoptions,tabpages,sesdir,folds,help,options,resize,winpos,winsize"

" 保存快捷键
map <leader>ss :mksession! my.vim<cr> :wviminfo! my.viminfo<cr>

" 恢复快捷键
map <leader>rs :source my.vim<cr> :rviminfo my.viminfo<cr>
map <Leader>mg ::%s/
/\r/g<CR>

" <<
 
" 设置快捷键实现一键编译及运行
nmap <Leader>m :wa<CR> :cd build/<CR> :!rm -rf main<CR> :!cmake CMakeLists.txt<CR>:make<CR><CR> :cw<CR> :cd ..<CR>
nmap <Leader>g :wa<CR>:cd build/<CR>:!rm -rf main<CR>:!cmake CMakeLists.txt<CR>:make<CR><CR>:cw<CR>:cd ..<CR>:!build/main<CR>

" >>
" 查找

" 使用 Grep.vim 插件在工程内全局查找,设置快捷键。快捷键速记法:search in project
nnoremap <Leader>sp :Grep -ir<CR><CR><CR>
" 使用 Grep.vim 插件在工程内全局查找,设置快捷键。快捷键速记法:search in buffer
nnoremap <Leader>sb :GrepBuffer -ir<CR><CR>

" <<

" >>
" 替换

" 替换函数。参数说明:
" confirm:是否替换前逐一确认
" wholeword:是否整词匹配
" replace:被替换字符串
function! Replace(confirm, wholeword, replace)
    wa
    let flag = ''
    if a:confirm
        let flag .= 'gec'
    else
        let flag .= 'ge'
    endif
    let search = ''
    if a:wholeword
        let search .= '\<' . escape(expand('<cword>'), '/\.*$^~[') . '\>'
    else
        let search .= expand('<cword>')
    endif
    let replace = escape(a:replace, '/\&~')
    execute 'argdo %s/' . search . '/' . replace . '/' . flag . '| update'
endfunction
" 不确认、非整词
nnoremap <Leader>R :call Replace(0, 0, input('Replace '.expand('<cword>').' with: '))<CR>
" 不确认、整词
nnoremap <Leader>rw :call Replace(0, 1, input('Replace '.expand('<cword>').' with: '))<CR>
" 确认、非整词
nnoremap <Leader>rc :call Replace(1, 0, input('Replace '.expand('<cword>').' with: '))<CR>
" 确认、整词
nnoremap <Leader>rcw :call Replace(1, 1, input('Replace '.expand('<cword>').' with: '))<CR>
nnoremap <Leader>rwc :call Replace(1, 1, input('Replace '.expand('<cword>').' with: '))<CR>

" <<

" >>
" web 前端

" surrond 添加 <p> 元素的快捷键
nmap <Leader>ap yss<p><CR>

" 对 HTML 元素进行转义:< -> &lt;、> -> &gt;、& -> &amp;、空格 -> &nbsp;、行尾添加 <br />
" 先后顺序敏感
function HtmlEscape()
    retab<CR>
    silent s/&/\&amp;/eg
    silent s/</\&lt;/eg
    silent s/>/\&gt;/eg
    silent s/ /\&nbsp;/eg
    silent s/$/<br \/>/eg
endfunction
vnoremap <Leader>he :call HtmlEscape()<CR>

"""
"回到上次打开文件的位置
if has("autocmd")
        " In text files, always limit the width of text to 78 characters
        autocmd BufRead *.txt set tw=78
        " When editing a file, always jump to the last cursor position
        autocmd BufReadPost *
        \ if line("'\"") > 0 && line ("'\"") <= line("$") |
        \ exe "normal g'\"" |
        \ endif
endif

"cscope
cs add cscope.out
set cscopequickfix=s-,c-,d-,i-,t-,e-
nmap <Leader>css :cs find s <cword><CR>
nmap <Leader>csg :cs find g <cword><CR>
nmap <Leader>csc :cs find c <cword><CR>
nmap <Leader>cst :cs find t <cword><CR>
nmap <Leader>cse :cs find e <cword><CR>
nmap <Leader>csf :cs find f <cword><CR>
nmap <Leader>csi :cs find i <cword><CR>
nmap <Leader>csd :cs find d <cword><CR>
"<<
"grep
"nnoremap <silent> <F3> :Rgrep<CR>
nmap <Leader>gr :Rgrep<CR>
let Grep_Default_Filelist = '*.c *.cpp *.asm *.h'
let Grep_Skip_Files = '*.bak *~ *.tags *.out *.o'
let Grep_Default_Options = '-i'
" <<
" quickfix
nmap <Leader>qo :copen<CR>
nmap <Leader>qc :cclose<CR>
"ctags 的ts
nmap <Leader>ts :ts<CR>
"<<
"原型提示:echofunc
let g:EchoFuncKeyNext='<C-n>'
let g:EchoFuncKeyPrev='<C-p>'
"<<
" BufExplorer
let g:bufExplorerDefaultHelp=0       " Do not show default help.
let g:bufExplorerShowRelativePath=1  " Show relative paths.
let g:bufExplorerSortBy='mru'        " Sort by most recently used.
let g:bufExplorerSplitRight=0        " Split left.
let g:bufExplorerSplitVertical=1     " Split vertically.
let g:bufExplorerSplitVertSize = 30  " Split width
let g:bufExplorerUseCurrentWindow=1  " Open in new window.
nnoremap <leader>be :BufExplorer<CR>
nnoremap <leader>bs :BufExplorerHorizontalSplit<CR>
nnoremap <leader>bv :BufExplorerVerticalSplit<CR>
"<<
let g:Powerline_symbols = 'fancy'


"python jedi
let g:jedi#use_tabs_not_buffers = 0
let g:jedi#popup_on_dot = 0


"<<
"
map <F4> :call TitleDet()<cr>'s
function AddTitle()
    call append(0,"/********************************************************************************")
    call append(1,"#")
    call append(2,"# Author: songdeling - songdeling@doov.com.cn")
    call append(3,"#")
    call append(4,"# Last modified: ".strftime("%Y-%m-%d %H:%M"))
    call append(5,"#")
    call append(6,"# Filename: ".expand("%:t"))
    call append(7,"#")
    call append(8,"# Description: ")
    call append(9,"#")
    call append(10,"*********************************************************************************/")
    echohl WarningMsg | echo "Successful in adding the copyright." | echohl None
endf

function TitleDet()
    let n=1
    "默认为添加
    while n < 10
        let line = getline(n)
        if line =~ '^\#\s*\S*Last\smodified:\S*.*$'
            call UpdateTitle()
            return
        endif
        let n = n + 1
    endwhile
    call AddTitle()
endfunction

"更新最近修改时间和文件名
function UpdateTitle()
    normal m'
    execute '/# *Last modified:/s@:.*$@\=strftime(":\t%Y-%m-%d %H:%M")@'
    normal ''
    normal mk
    execute '/# *Filename:/s@:.*$@\=":\t\t".expand("%:t")@'
    execute "noh"
    normal 'k
    echohl WarningMsg | echo "Successful in updating the copy right." | echohl None
endfunction


分享到:
2 1

*有问题之处烦请在评论中指出非常感谢!
不是我想要的内容,继续搜索:

扫描二维码手机查看

发布评论:


登录:
  表情:
评论话题
推荐阅读:
最简单的Banner轮播左右切换效果代码及实现思路(附带源码)   阅读:30622mysql的四种索引类型   阅读:21014移动端自适应rem原理   阅读:9265php 使用 smtp.php 类在线发送邮件功能   阅读:5173centos 7 添加 redis 3.2.9 开机启动脚本   阅读:8891mysql5.7主从同步中binlog同步模式详解   阅读:6114php文件下载防盗链   阅读:9297爱编程,也爱健康   阅读:3943一键分享到QQ空间、QQ好友、新浪微博、微信代码   阅读:124849linux时间戳有趣的情人节秒1234567890   阅读:5094centos 7 修改系统屏幕分辨率   阅读:42205php 获取当前前后年、月、星期、日、时分秒的时间   阅读:6224shell脚本批量删除几天前的文件   阅读:9029linux rarcrack破解rar、zip和7z压缩包简单密码的工具   阅读:15816关于PHP程序员技术职业生涯规划   阅读:2464javascript获取两个日期间的所有日期   阅读:6095php打印九九乘法表   阅读:8982nginx安装redis模块   阅读:4613phpexcel 超简单从excel表格一键导入数据到数据库教程   阅读:11667mysql中文分词全文搜索索引讯搜的安装   阅读:6316php生成二维码   阅读:6411给网站添加一键qq登录的功能   阅读:6851php打印九九乘法表   阅读:8982centos 7.2 添加php7 的 php-fpm 开机启动   阅读:23207mysql数据一键导出到csv文件   阅读:5258php文件下载防盗链   阅读:9297HTTP 1.1 协议详解   阅读:9897mysql5.7开启sql日志的配置   阅读:8387linux rarcrack破解rar、zip和7z压缩包简单密码的工具   阅读:15816霍金24岁博士毕业论文在线预览   阅读:5253栈和堆的区别   阅读:4666phpexcel 超简单从excel表格一键导入数据到数据库教程   阅读:11667简单的DOS攻击之死亡之ping详解   阅读:49736企业让你去面试,可能不是真的招人   阅读:5576mysql5.7主从同步配置   阅读:4542一键分享到QQ空间、QQ好友、新浪微博、微信代码   阅读:124849解决 nginx 413 request entity too large   阅读:4145霍金24岁博士毕业论文在线预览   阅读:5253phpexcel 超简单从数据库一键导出数据到excel教程   阅读:6824网站局部小图片优化-base64编码图片   阅读:11109网站局部小图片优化-base64编码图片   阅读:11109php中地址引用&的真正理解-变量引用、函数引用、对象引用   阅读:5245php打印九九乘法表   阅读:8982centos7开启交换内存   阅读:10212php压缩页面的html代码一行显示   阅读:6759shell发送邮件脚本   阅读:6855javascript对cookie操作详细代码函数   阅读:5003面试的时候回去等通知,等电话的真实意思   阅读:22871Nginx 配置文件详解   阅读:4326HTTP 1.1 协议详解   阅读:9897