• 我的vim配置脚本


      自己的VIM 配置脚本,拥有自主独立知识产权(参考了一点别人的),只使用了一个插件ctags ,主要实现了一下功能:

    • 自动补全括号,双引号,单引号,包括{},(),"" , ''只要输入符号的左边部分,自动补全,并以插入模式自动将光标移动到符号内部
    • 在{},() 内部按下Enter键,自动换两行,并将光标移动到两行中的第一行,并完成自动缩进
    • 命令模式下,快捷键"s",保存文件,保存文件的同时,自动刷新tags,按下ctrl+]和ctrl+t 实现函数 ,结构体 , 类的自动跳转和返回。
    • 命令模式下,快捷键"q",退出VIM
    • 在插入模式,光标右边是},),",',按下Tab键自动跳出该符号,如果不知这些符号,完成缩进动作
    • 在命令模式,按下"t",列出所有打开的文件
    • 在命令模式,按下";",调出命令输入行
    • 在命令模式,按下<- 和->可以在打开的Buffer之间切换
    • 可以用鼠标点击
    • 高亮光标所在行
    • 状态高亮显示当前打开文件信息
    • F4关闭当前Buffer

    其他更复杂的配置,以后慢慢补充

    "设置帮助文档为中文
    set helplang=cn
     
    "设置编码
    set fileencodings=utf-8,gb2312,gb18030,gbk,ucs-bom,cp936,latin1
     
    "高亮显示
    syntax enable      
    syntax on
     
    "显示行数
    set number  
             
    "设置tab键
    set tabstop=4
     
     
    "设置缩进
    set softtabstop=4
    set shiftwidth=4
     
    "设置自动缩进
    set autoindent
    set cindent
     
    "不产生swap文件和备份文件
    set noswapfile
    set nobackup
     
    "设置检查拼写(感觉用着没有啥子效果)
    "set spell
     
    "显示光标所在行号
    set cursorline
     
    "显示光标所在行号和列号
    set ruler
     
    "鼠标可以在buffer中点击
    set mouse=a
    set showmode
     
    "高亮搜索关键字
    set hlsearch
    "智能搜索
    set incsearch
     
    "搜索忽略大小写
    set ignorecase
     
    "显示输入的命令
    set showcmd
     
    "打开文件类型检测
    filetype on
    filetype plugin on
     
    "设置常用符号自动补全(注意:inore是指 vim的各种工作模式)
    inoremap ( ()<ESC>i
    inoremap [ []<ESC>i
    inoremap " ""<ESC>i
    inoremap ' ''<ESC>i
    inoremap { {}<ESC>i
     
    "自定义快捷键(注意这里的<cr>表示字符’<‘c'‘r’>,在配置脚本中等同于Enter键)
    "保存和退出
    nmap s :w<cr>
    nmap q :q<cr>
     
     
    "使用左右方向键在不同buffer之间的切换
    nmap <Left> :bp<CR>
    nmap <Right> :bn<CR>
    
    "F4关闭当前buffer
    nmap <F4>    :bd<CR>
    nmap f :e 
     
    "在打开的文件之间互相切换
    nmap t :ls<cr>
    nmap b :b
    nmap ; :
    
    "在编辑模式下,按下'{'或'(',括号将自动补全,光标移动到括号中,如果按下'Enter'键,实现自动换行并缩进
    inoremap <CR> <C-R>=Enterskip()<CR>
    function Enterskip()
    let char = getline(".")[col(".") - 1]
    if char == '}' || char == ')'
    return "<CR><ESC>O"
    else
    return "<CR>"
    endif
    endf
    
    "在编辑模式下,如果在当光标右边是下面这些符号,按下'Tab'键,自动跳出括号,反之正常的tab键功能 
    inoremap <Tab> <C-R>=Tabskip()<CR>
    function Tabskip()
    let char = getline(".")[col(".") - 1]
    if char == '}' || char == ']' || char == '"' || char == '>' || char == ')' || char == "'"
    return "<Right>"
    else
    return "<Tab>"
    endif
    endf
     
     
    "待定脚本(还没搞明白的脚本)
    "inoremap ] <c-r>=ClosePair(']')<CR>(这条脚本待定)
    "inoremap < <><LEFT>
    "inoremap * **<LEFT>
    "只针对c,cpp文件才使用大括号跨行自动补全功能
    "inoremap ) <c-r>=ClosePair(')')<CR>
    "autocmd FileType c,cpp,go inoremap { {<CR>}<ESC>O
    "针对sh 文件使用大括号当前行自动补全功能
    "autocmd FileType sh inoremap { {}<ESC>i
    "inoremap } <c-r>=ClosePair('}')<CR>
     
     
    "function! ClosePair(char)
    "    if getline('.')[col('.') - 1] == a:char
    "        return "<Right>"
    "    else
    "        return a:char
    "    endif
    "endfunction
     
     
    "ctags 自动补全(每次保存文件的时候执行ctags -R)
    "--languages=c++,c,java,Make,Sh, 就是制定了本次ctags扫描的语言是什么
    "--c++-kinds=+px 指示ctags扫描一些函数声明
    autocmd BufWritePost * call system("ctags --tag-relative=yes -f ~/.tagsdir/tags -R --languages=c++,c,Java,Make,Sh, --c++-kinds=+px --fields=+aiKSz --extra=+q")
    "autocmd BufWritePost * call system("ctags --tag-relative=yes -f /home/satan/.tagsdir/tags -R *")
     
    "因为每次保存文件的时候,都会刷新tags文件,但是都是在文件所在文件的当前文件夹下刷新,这样下次使用跳转的时候,会出现多个选择,所以直接指定一个tags生成的文件夹
    set tags=/home/satan/.tagsdir/tags
    set autochdir
     
     
    " 在状态栏显示当前文件的相关信息
    set laststatus=2      " 总是显示状态栏
    highlight StatusLine cterm=bold ctermfg=black ctermbg=yellow
    " 获取当前路径,将$HOME转化为~
    function! CurDir()
        let curdir = substitute(getcwd(), $HOME, "~", "g")
        return curdir
    endfunction
    set statusline=[%n] %f%m%r%h |  pwd: %{CurDir()}  |%=| %l,%c %p%% | ascii=%b,hex=%b%{((&fenc=="")?"":" | ".&fenc)} | %{$USER} @ %{hostname()}
    
    
  • 相关阅读:
    Linux nginx 安装 启动
    MySQL5.7版本sql_mode=only_full_group_by问题解决办法
    Tomcat配置Gizp 客户端使用okHttp3
    tomcat 验证码显示问题
    JProfiler 教程 使用说明
    mysql update 子查询作为条件
    reids等非关系数据库管理工具treesoft
    常用Linux 命令
    vue中计算属性的get与set方法
    Less和Sass相同与不同
  • 原文地址:https://www.cnblogs.com/big-devil/p/8486185.html
Copyright © 2020-2023  润新知