• Linux : Vim 使用与配置 (附 GitHub 自动化配置脚本)


    由于经常使用 vim 编辑配置文件,有时候也会进行使用vim 编写一些脚本和c/c++ 程序,所以配置一个常用的 vim 是很是必要的。这篇博文主要是记录vim使用和配置相关的一些知识点。

    关于vim :

      vim 是比较好用的编辑器,很多linux server 都自带vi, vim 是vi 的升级版本。可以方便在linux 环境中进行安装和配置。vim主要功能是编写,并且有很好的扩展性。通过配置可以优化出适合自己的一种vim,并且可以把配置文件储存到github或者远程服务器上,当进入新的环境之中,只需要几行简单的命令,就可以还原配置。vim 有三种模式: 一般模式,编辑模式,命令行模式。通过快捷键 esc, : 可以方便得在三种模式下进行切换。如果想详细得了解 vim的使用可以阅读 《VIM USER MANUAL》,不过你只阅读本博文也是可以的。

    vim 相关文件:

    1.  .viminfo : 
      • 在vim中操作的行为,vim会自动记录下来,保存在 ~/.viminfo 文件中。 这样为了方便下次处理, 如:vim打开文件时,光标会自动在上次离开的位置显示。 原来搜索过的字符串,新打开文件时自动高亮显示。 ~/.viminfo 文件是系统自动生成。
    2. .vimrc : 
      • vimrc文件是vim的环境设置文件。 整体的vim的设置是在 /etc/vimrc 文件中。 不建议修改/etc/vimrc 文件,每个用户可以在用户根目录中设置vim,新建 ~/.vimrc
    3. .vim目录:
      • .vim/ 目录是存放所有插件的地方。vim 有一套自己的脚本语言 vimscript,通过这种脚本语言可以实现与 vim 交互,达到功能扩展的目的。一组 vimscript 就是一个 vim 插件,vim 的很多功能都由各式插件实现。此外,vim 还支持 perl、python、lua、ruby 等主流脚本语言编写的插件,前提是 vim 源码编译时增加 ---enable-perlinterp、--enable-pythoninterp、--enable-luainterp、--enable-rubyinterp 等选项。vim.org 和 github.com 有丰富的插件资源,任何你想得到的功能,如果 vim 无法直接支持,那一般都有对应的插件。

    vim 常用快捷键:

    1.  基本操作:
      • 移动:方向键,h, j, k, l ;  可与数字组合使用  10j, 向下10个字符, 20l:向右20个字符 ; 0 移动到行首,$ 移动到行尾; nG  n为数字,移动到第n行
      • 单词为单位移动:w 正向移动到相邻单词的首字符、b 逆向移动到相邻单词的首字符、e 正向移动到相邻单词的尾字符、 ge 逆向移动到相邻单词的尾字符;配合查找字符的方式移动:fa 正向移动到第一个字符 a 处、Fa 逆向移动到第一个字符 a 处。非相邻的单词或字符间移动,你可以配合数字参数,如,正向移动到相隔八个单词的首字符执行 8w、逆向移动到第四个 a 字符处执行 4Fa
      • 翻页:Ctrl + f 向下翻一页 ; Ctrl + b 向上一页;  Ctrl + d 向下半页 ; Ctrl + u 向上半页
      • 查找:/word 向下查找 word ; ?word 向上查找word;  n 重复前一次查找 ; N 重复前一次查找,反向进行
      • 删除:x 向后删除一个字符; 向前删除一个字符; nx n为数字,向后删除n个字符; dd 删除当前行;  ndd n为数字,删除n行
      • 复制:yy 复制当前行; nyy n为数字,复制向下的n行 ; y1G 复制从第一行到当前行; yG 复制当前行到最后一行 ; y0 复制从行首到光标之间的字符; y$ 复制光标所在到行尾之间的字符
      • 粘贴:p 粘贴到下一行; P 粘贴到上一行; J 将当前行和下一行合并成一行; u 还原上次操作 ;  Ctrl+r 重做上一个操作;  . 小数点,重复前一个操作
      • 编辑:i 光标所在处插入; I 当前行第一个非空字符出插入; a 光标下一个字符开始; o 下一行开始; O 上一行开始 : 进入编辑模式, esc 退出编辑模式;
      • 保存::w 保存文件; :w! 强制保存; :q 退出vim; :q! 退出不保存文件; :wq退出并保存文件, 表示进入命令行模式, esc 退出命令行模式。
      • 命令行: :! command 执行命令, 如 “:! ls -l” 列出当前目录文件; 当你发现打开文件时没有 保存权限的时候,可以通过命令行模式获取root 身份,w 保存文件。
      • vim 保存readonly 文件::w !sudo tee % : 运行外部shell命令,用 tee 把当前stdin缓冲区的数据写到当前文件(%)
      • 帮助信息: :h 查看帮助信息, :h 插件 查看对应插件的帮助信息。
      • 快速搜索:光标停留在想要查找的单词的任意一个字母上面, 然后输入Shift + *  或者 Shift+#  ,即可以向下和向上搜索光标所在的词,并且可以通过 或  N 进行上一个或下一个的匹配。此方法所有匹配单词会高亮,要取消高亮,输入:noh 来取消高亮.

     2. 块操作:

      • 进入: v, V, ctrl + v
      • 选择:v 字符选择,光标经过的地方反白选择; 行选择,光标经过的整行反白选择;Ctrl+v  块选择,长方形的方式选择
      • 复制,粘贴,删除:y 将选中的地方复制; d 将选中的地方删除;p 进行粘贴

       3. 多模式编辑     

      • 编辑下一个文件 :n 
      • 编辑上一个文件:N
      • 列出文件: files
      • 打开多个文件:vim file1 file2 , 文件之间可以进行互相复制,通过vim。这样在server中操作极为方便。

       4. 多窗口编辑:

      • Ctrl+w+j :移动下方窗口,先按Ctrl+w放开,然后 j 或者↓键
      • Ctrl+w+k :移动上方窗口
      • Ctrl+w+q :退出文件,同 :q
      • :sp [filename] :打开新窗口,filename可以为空,为空打开当前文件

     vim 常用配置选项:

    1. set nu : 显示行号 , 取消:set nonu
    2. set ruler: 显示状态栏,右下角, 取消: set noruler
    3. 等,具体使用 可参见 我的vim 配置:

    vim配置(myself):

    " vim 自身功能配置
    set nu " line number 
    set cursorline " row line
    set cursorcolumn "col line 
    set hlsearch
    set laststatus=2
    set nowrap
    
    " 前导键
    let mapleader=";"
    
    " 基础配置
    " filetype plugin on
    " 命令映射,<Leader> 表示前导键
    nmap LB 0
    nmap LE $
    nmap <Leader>q :q<CR>
    nmap <Leader>w :w<CR>
    nmap <Leader>Q :qa!<CR>
    " 设置快捷键遍历子窗口
    " " 依次遍历
    nnoremap nw <C-W><C-W>
    " 跳转至右方的窗口
    nnoremap <Leader>lw <C-W>l
    " 跳转至方的窗口
    nnoremap <Leader>hw <C-W>h
    " 跳转至上方的子窗口
    nnoremap <Leader>kw <C-W>k
    " 跳转至下方的子窗口
    nnoremap <Leader>jw <C-W>j
    " 让配置变更立即生效
    autocmd BufWritePost $MYVIMRC source $MYVIMRC
    " 实时搜索
    set incsearch
    " vim 自动补全
    set wildmenu
    
    " 关闭兼容模式
    set nocompatible " vundle required
    " 插件安装
    " vundle 环境设置
    filetype off
    set rtp+=~/.vim/bundle/Vundle.vim
    " vundle 管理的插件列表必须位于 vundle#begin() 和 vundle#end() 之间
    call vundle#begin()
    " let Vundle manage Vundle, required
    Plugin 'VundleVim/Vundle.vim'
    Plugin 'altercation/vim-colors-solarized'
    Plugin 'octol/vim-cpp-enhanced-highlight'
    Plugin 'Lokaltog/vim-powerline'
    Plugin 'scrooloose/nerdcommenter'
    Plugin 'SirVer/ultisnips'
    Plugin 'honza/vim-snippets'
    Plugin 'scrooloose/nerdtree'
    Plugin 'sjl/gundo.vim'
    Plugin 'Valloric/YouCompleteMe'
    "Plugin 'Valloric/YouCompleteMe'
    " 插件列表结束
    call vundle#end()
    filetype plugin indent on
    
    " code scheme 
    syntax enable
    syntax on
    " set background=light
    " colorscheme solarized
    
    " powerline scheme
    let g:Powerline_colorscheme='solarized256'
    " 代码缩进
    " 设置编辑时制表符占用空格数
    set tabstop=4
    " 设置格式化时制表符占用空格数
    set shiftwidth=4
    " 自适应不同语言的智能缩进
    filetype indent on
    
    " 基于缩进或语法进行代码折叠
    set foldmethod=indent
    "set foldmethod=syntax
    set nofoldenable
    
    " vim-snippets
    " let g:UltiSnipsExpandTrigger="<tab>"
    " let g:UltiSnipsJumpForwardTrigger="<c-b>"
    " let g:UltiSnipsJumpBackwardTrigger="<c-z>"
    let g:UltiSnipsExpandTrigger="<leader><tab>"
    let g:UltiSnipsJumpForwardTrigger="<leader><tab>"
    let g:UltiSnipsJumpBackwardTrigger="<leader><s-tab>"
    let g:UltiSnipsEditSplit="vertical"
    
    " 启用: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
    
    " 调用 gundo 树
    nnoremap <Leader>ud :GundoToggle<CR>
    " YCM 补全菜单配色
    " 菜单
    highlight Pmenu ctermfg=2 ctermbg=3 guifg=#005f87 guibg=#EEE8D5
    " 选中项
    "highlight PmenuSel ctermfg=2 ctermbg=3 guifg=#AFD700 guibg=#106900
    " 补全功能在注释中同样有效
    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
    " 禁止缓存匹配项,每次都重新生成匹配项
    let g:ycm_cache_omnifunc=0
    " " 语法关键字补全            
    let g:ycm_seed_identifiers_with_syntax=1

     本配置是参考网路上的配置方式来进行配置的,使用了 vundle 插件来管理vim 插件。 重定义了前导键:; , 使用了 的插件基本上来自github ,如果你们不明白具体的插件的作用,请访问github主页进行查询插件功能和配置方式。

     配置功能如下:

    • 美化界面
    • 快速注释功能
    • 模板补全功能
    • 工程浏览功能
    • 代码补全功能

    具体快捷方式,请看配置。配置好的vim 界面如下图:

    vim 环境配置主要是方便服务器或者字符界面下的使用,现在图形界面上也有很多优秀的工具像 vscode, atom 等。总之,怎么方便怎么来; 如果你觉得本文对你有帮助,请点击右下角的推荐支持作者。

    GitHub Repo : Vim 环境自动化配置脚本:https://github.com/yaowenxu/envfile/tree/master/vim 

    保持更新,转载请注明出处。

  • 相关阅读:
    HDU 4611 Balls Rearrangement 数学
    Educational Codeforces Round 11 D. Number of Parallelograms 暴力
    Knockout.Js官网学习(简介)
    Entity Framework 关系约束配置
    Entity Framework Fluent API
    Entity Framework DataAnnotations
    Entity Framework 系统约定配置
    Entity Framework 自动生成CodeFirst代码
    Entity Framework CodeFirst数据迁移
    Entity Framework CodeFirst尝试
  • 原文地址:https://www.cnblogs.com/xuyaowen/p/vim_usage.html
Copyright © 2020-2023  润新知