vim配置

Posted 今天的风,甚是喧嚣

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vim配置相关的知识,希望对你有一定的参考价值。

一、vim安装与简单的配置以及光标字体样式更改

vim安装

  1. 在命令行里输入 sudo apt-get install vim-gtk (Ubuntu系统)

  2. 在命令行中输入 vi 然后连续按两次tab键,查看有无 vim ,有的话即安装成功


vim 配置

  1. 在命令行输入 sudo vim /etc/vim/vimrc ,在该文档最后加上如下代码

    syntax on   "高亮代码"
    set nu                        "显示行号"
    set relativenumber   "以当前行号为基准显示行号"
    set cursorline  "在当前光标位置显示一条线
    set tabstop=4                  "tab长度设置为4"
    ""set softtabstop=4
    set shiftwidth=4            "设置缩进空格数为4"
    set autoindent           "设置自动缩进,每行缩进值与上一行相等"
    set nobackup                "覆盖文件时不备份"
    set cursorline              "突出显示当前行"
    set ruler                    "在右下角显示光标位置的状态行"   
    set autoindent             "自动缩进"
    set noexpandtab          " 不要用空格代替制表符
    set hlsearch                  "搜索逐字符高亮
    set foldmethod=marker        "代码折叠
    set cmdheight             " 命令行(在状态行下)的高度,默认为1,这里是2
    set mouse=a                   " 可以在buffer的任何地方使用鼠标(类似office中在工作区双击鼠标定位)
    set showmatch                 " 高亮显示匹配的括号
    
    set enc=utf-8                 "编码设置
    set langmenu=zh_CN.UTF-8      "语言设置
    set helpheight=15             "帮助的行高
    set helplang=cn               "帮助语言
    set fillchars=vert:\\ ,stl:\\ ,stlnc:\\      " 在被分割的窗口间显示空白,便于阅读
    set showmatch                 " 高亮显示匹配的括号
    set scrolloff=3               " 光标移动到buffer的顶部和底部时保持3行距离
    set smartindent               " 为C程序提供自动缩进
    
    
    au BufRead,BufNewFile *  setfiletype txt  " 高亮显示普通txt文件(需要txt.vim脚本)
    
    "“变量名的自动补全,可以自己手动补全CTRL+N/P,n是向下找,p是向前找。
    "括号匹配
    "":inoremap < <><ESC>i    #与大于小于冲突
    "":inoremap > <c-r>=ClosePair(\'>\')<CR>
    :inoremap ( ()<ESC>i
    "":inoremap ) <c-r>=ClosePair(\')\')<CR>
    ""inoremap { {<CR>}<ESC>O   #与数组冲突
    :inoremap { {}<ESC>i
    "":inoremap } <c-r>=ClosePair(\'}\')<CR>
    :inoremap [ []<ESC>i
    "":inoremap ] <c-r>=ClosePair(\']\')<CR>
    :inoremap " ""<ESC>i
    :inoremap \' \'\'<ESC>i
    
    "function! ClosePair(char)
    "    if getline(\'.\')[col(\'.\') - 1] == a:char
    "        return "\\<Right>"
    "    else
    "        return a:char
    "    endif
    "endfunction
    "filetype plugin indent on 
    
    "自动删除
    " 按退格键时判断当前光标前一个字符,如果是左括号,则删除对应的右括号以及括号中间的内容
    function! RemovePairs()
    	let l:line = getline(".")
    	let l:previous_char = l:line[col(".")-1] " 取得当前光标前一个字符
     
        if index(["(", "[", "{"], l:previous_char) != -1
    		let l:original_pos = getpos(".")
    		execute "normal %"
    		let l:new_pos = getpos(".")
     
    		" 如果没有匹配的右括号
    		if l:original_pos == l:new_pos
    			execute "normal! a\\<BS>"
    			return
    		end
    
    		let l:line2 = getline(".")
    		if len(l:line2) == col(".")
    		" 如果右括号是当前行最后一个字符
    			execute "normal! v%xa"
    		else
    		" 如果右括号不是当前行最后一个字符
    			execute "normal! v%xi"
    		end
     
    	else
    		execute "normal! a\\<BS>"
    	end
    endfunction
    " 用退格键删除一个左括号时同时删除对应的右括号
    inoremap <BS> <ESC>:call RemovePairs()<CR>a
    
    
    "设置跳出自动补全的括号
    func SkipPair()  
        if getline(\'.\')[col(\'.\') - 1] == \')\' || getline(\'.\')[col(\'.\') - 1] == \']\' || getline(\'.\')[col(\'.\') - 1] == \'"\' || getline(\'.\')[col(\'.\') - 1] == "\'" || getline(\'.\')[col(\'.\') - 1] == \'}\'  
                return "\\<ESC>la"  
        else  
            return "\\t"  
        endif  
    endfunc  
    " 将tab键绑定为跳出括号  
    inoremap <TAB> <c-r>=SkipPair()<CR>
    
    
    " AUTO_INSERT_HEAD_FILE: {{{1
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    """新建.c,.h,.sh,.java文件,自动插入文件头 
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    autocmd BufNewFile *.cpp,*.[ch],*.sh,*.java exec ":call SetTitle()" 
    ""定义函数SetTitle,自动插入文件头 
    func SetTitle() 
    	"如果文件类型为.sh文件 
    	if &filetype == \'sh\' 
    		""call setline(1,"\\#############################") 
    		""call append(line("."),   "\\###	File Name: ".expand("%")) 
    		call setline(1,   "\\###	File Name: ".expand("%")) 
    		""call append(line(".")+1, "\\###	Author   : Andrea") 
    		""call append(line(".")+2, "\\#	Email    : andreayymm@163.com") 
    		call append(line("."), "\\#	Created  : ".strftime("%c")) 
    		call append(line(".")+1, "\\#############################") 
    		call append(line(".")+2,"\\#!/bin/bash") 
    		call append(line(".")+3, "") 
    	else 
    		""call setline(1, "/******************************") 
    		""call append(line("."), "/*	#	 FileName	: ".expand("%")) 
    		call setline(1, "/*	#	 FileName	: ".expand("%")) 
    		""call append(line(".")+1, "	#	 Author		: Andrea ") 
    		""call append(line(".")+2, "	#	 Email		: andreayymm@163.com ") 
    		call append(line("."), "	#	 Created	: ".strftime("%c")) 
    		call append(line(".")+1, " *****************************/") 
    		call append(line(".")+2, "")
    	endif
    	if &filetype == \'cpp\'
    		call append(line(".")+3, "#include<iostream>")
    		call append(line(".")+4, "using namespace std;")
    		call append(line(".")+5, "")
    		call append(line(".")+6, "int main(int argc, const char *argv[])")
    		call append(line(".")+7, "{")
    		call append(line(".")+8, "	   return 0;")
    		call append(line(".")+9, "}")
    	endif
    	if &filetype == \'c\'
    		call append(line(".")+3, "#include<stdio.h>")
    		call append(line(".")+4, "")
    		call append(line(".")+5, "int main(int argc, const char *argv[])")
    		call append(line(".")+6, "{")
    		call append(line(".")+7, "    return 0;")
    		call append(line(".")+8, "}")
    	endif
    "	if &filetype == \'java\'
    "		call append(line(".")+6,"public class ".expand("%"))
    "		call append(line(".")+7,"")
    "	endif
    	"新建文件后,自动定位到文件末尾
    	autocmd BufNewFile * normal G
    endfunc 
    
    set confirm                   " 在处理未保存或只读文件的时候,弹出确认
    
  2. 关于代码折叠

    <1> zf(Fold creation)–创建折叠(注意在.vimrc中设置set foldmethod=marker)
    
    案例
    
    zf56G,创建从当前行起到56行的代码折叠;
    
    10zf或10zf+或zf10↓,创建从当前行起到后10行的代码折叠。
    
    10zf-或zf10↑,创建从当前行起到之前10行的代码折叠。
    
    在括号处zf%,创建从当前行起到对应的匹配的括号上去((),{},[],<>等)。
    
    zr 打开被折叠的代码
    zm 折叠打开的代码
    
    zD 循环删除 (Delete) 光标下的折叠,即嵌套删除折叠。仅当 ‘foldmethod’ 设为 “manual” 或 “marker” 时有效。
    zE 除去 (Eliminate) 窗口里“所有”的折叠。仅当 ‘foldmethod’ 设为 “manual” 或 “marker” 时有效。
    
    常用折叠方式
    {{{1
    
  3. vim test1.c test2.c -O:O选项可以同时打开两个文件

  4. 指定查找之前的命令

    • Ctrl+R:输入若干字符(关键词),会搜索包含所输入关键词的历史命令。继续按Ctrl+R则会继续向前搜索包含关键词的历史命令。找到目标命令后,可以直接按enter键执行找到的命令。如果还想修改参数则可以按右箭头。
    • Ctrl+G:从Ctrl+R的搜索模式中跳出
[2] noremap
  1. noremap n h:按下n键就相当于按下h键
[3] map
  1. map S :w<CR> :在命令行模式下按S就相当于按了 冒号 w 回车
  2. map s <nop>:让 s键在命令行模式下失效
[4] 小技巧
  1. zz:把当前行移动到屏幕中心
[5] 键位
  1. 回车键:<CR>

  2. tab键:<TAB>

  3. 空格键:<space>

  4. ctrl键:比如我要设置一个 ctrl + l , noremap <C-l>

  5. 上下左右键:<up> <down> <left> <right>

  6. 自定义快捷键

    let mapleader = " "  ## 把空格定义成新的快捷键
    
    noremap <leader>w  :set nonumber<cr>  ## 按空格加w,执行set nonumber<cr>命令
    

linux命令行光标字体样式

  • 可以在 编辑 - 首选项 里面更改
syntax on
set number
set relativenumber
set cursorline
set wrap  "代码一行装不下自动换行
set showcmd
set wildmenu  "命令行代码补全时有多个选项以菜单显示"
set showmatch

set hlsearch  "高亮显示搜索结果"
exec "nohlsearch"
set incsearch "搜索的时候就高亮显示搜索结果"
set ignorecase "搜索时忽略大小写"
set smartcase  "只能搜索忽略大小写,大写的时候只会搜索大写"

inoremap { {}<ESC>i
inoremap " ""<ESC>i
inoremap \' \'\'<ESC>i

map S :wa<CR>          

二、vim插件配置

[1] 准备工作

  1. 首先我们需要安装一个软件 curl,直接使用命令 sudo apt-get install curl即可安装。

  2. 然后执行命令如下命令

    curl -fLo ~/.vim/autoload/plug.vim --create-dirs \\
        https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
    
    • 注意,如果连接报错则修改 /etc/hosts 文件,加上下面这行代码

      199.232.68.133 raw.githubusercontent.com  ##前面是网址的IP地址
      
  3. 安装软件成功后,打开vim的配置文件vimrc,添加以下内容

    call plug#begin(\'~/.vim/plugged\')
    ##下面都是安装的插件
    ########### 插件 #################
    Plug \'vim-airline/vim-airline\'  ## 显示一个状态栏
    ""Plug \'Valloric/YouCompleteMe\'  ## 自动补全
    Plug \'mhinz/vim-startify\'  ## 使用vim的时候可以选择之前的文件打开
    Plug \'itchyny/vim-cursorword\' ## 所在单词用横线标记
    ## <leader>k :高亮所有相同的单词
    ## <leader>K :取消高亮
    Plug \'lfv89/vim-interestingwords\'  
    ###################################
    call plug#end()
    

以上是关于vim配置的主要内容,如果未能解决你的问题,请参考以下文章

从零开始配置vim(27)——代码片段

vim代码片段插件ultisnips的使用

latex在vim中的代码片段

VIM 代码片段插件 ultisnips 使用教程

Sublime text3最全快捷键清单

如何使用sublime代码片段快速输入PHP头部版本声明