zoukankan      html  css  js  c++  java
  • VIM常用操作, 插件和vimrc文件

    VIM常用操作, 插件和vimrc文件

    先上图:

    我的自定义配色方案:

    系统的evening配色方案:

    1.常用操作
    VIM作为文本编辑器,其强大之处,在我看来,首先就是快速的编辑能力,其次才是丰富的扩展插件。
    所以掌握vim的快速编辑的方法是非常重要的,这里列举一些必须熟记的跟效率有关的操作.


    <基本编辑操作>
    上下左右移动:对应为上(K),下(J),左(H), 右(L);这个是基本要求,千万不要用方向键,用方向键的朋友伤不起~。
    gg:跳到文档开头
    G:跳到文档末尾
    w:跳到下一个单词开头; 4w:跳到往后的第四个单词的开头,依次类推.
    e:跳到下一个单词结尾
    b:跳到上一个单词开头;4b:跳到往前的第四个单词的开头,依次类推.
    0:跳到行的开头
    ^:跳到行的开头的第一个字符处
    $:跳到行的末尾


    <快速编辑操作>
    =:快速调整当前行的缩进 gg=G:全文档快速缩进调整
    Ctrl+p(Ctrl+n):快速补全命令,这个在写代码时非常有用,在编辑模式中, 输入几个字符后再输入此命令则 开始向上(下)搜 索开头与其匹配的单词并补齐, 不断输入此命令则循环查找. 此命令 会在所有在这个 vim 程序中打开的文件中进行匹配.
    Ctrl+x+l:自动补全一行的内容,只在当前文档查找匹配的行,多个选项时通过快速补全命令选择.
    Ctrl+x+f:自动补全目录.如我输入 c:\p,然后按Ctrl+x+f, 则得到 C:\Program Files\
    abbr:缩写设置,如:abbr cmain int main(int argc, char** argv),则下次只要输入cmain后再输入其他非字母符号, 它就会自动扩展为int int main(int argc, char** argv)
    qa:录制宏, 宏这个不多解释,就是为了重复执行一系列操作准备的,好一点的编辑器都可以录制宏.
    q:结束录制
    @a: 执行一次宏, 100@a:重复执行100次


    <查找相关>
    查找默认是区分大小写的,要不区分大小写的话,先:set ignorecase
    f:在当前行查找字符,如fx查找x, ';'查找下一个, ','查找上一个.
    /xxx: 向下查找xxx,xxx允许正则表达式
    ?xxx:向上查找xxx,xxx允许正则表达式
    n:查找下一个
    N查找上一个
    *:查找并高亮当前光标下的单词.
    g*:查找并高亮包含当前单词的字符串. 如"helloworld world", 光标在空格后的world上按g*, 则"helloworld"也会高亮
    %:查找与光标所在处括号相匹配的反括号, 包括 () [] {}


    <替换相关>
    替换是vim的强项, 因为可以用正规表达式来匹配字符串.
    替换表达式的一些字符含义:
    %:全文档搜索
    g:全部替换
    c:替换前确认
    以下提供几个例子.
    :s/aa/bb/g :将光标所在行出现的所有包含 aa 的字符串中的 aa 替换为 bb, g表示全部匹配点都替换,没有g则只替换第一个匹配的
    :s/\<aa\>/bb/g :将光标aaxy所在行出现的所有 aa 替换为 bb, 仅替换 aa 这个单词,类似于aaxy之类的不会被替换
    :%s/aa/bb/g :将文档中出现的所有包含 aa 的字符串中的 aa 替换为 bb
    :12,23s/aa/bb/g :将从12行到23行中出现的所有包含 aa 的字符串中的 aa 替换为 bb
    :12,23s/^/#/ :将从12行到23行的行首加入 # 字符
    :%s= *$== :将所有行尾多余的空格删除
    :g/^\s*$/d :将所有不包含字符(空格也不包含)的空行删除.


    <复制粘贴>
    y 表示拷贝, d 表示删除, p 表示粘贴. 其中拷贝与删除是与光标移动命令
    YY:复制整行
    dd:删除整行
    ddp:交换当前行和下一行
    ggyG:表示复制整篇文档
    ggdG:表示删除整篇文档
    yw:表示拷贝从当前光标到光标所在单词结尾的内容.
    dw:表示删除从当前光标到光标所在单词结尾的内容.
    y0:表示拷贝从当前光标到光标所在行首的内容.
    d0:表示删除从当前光标到光标所在行首的内容.
    y$:表示拷贝从当前光标到光标所在行尾的内容.
    d$:表示删除从当前光标到光标所在行尾的内容.
    yfa:表示拷贝从当前光标到光标后面的第一个a字符之间的内容.
    dfa:表示删除从当前光标到光标后面的第一个a字符之间的内容.


    2.常用插件
    <ctags>
    这个其实不算插件,是一个独立的程序,需要安装这个程序放在系统Path所包含的目录中。
    安装很简单,直接下载ctags.exe即可(Windows下),最简单就直接将ctags放在system32目录下。
    为了操作方便,在vimrc中设置一些快捷键就可以了:
    "-------------------------------------------cags------------------------------>>
    map <F8> :!ctags -R --fields=+lS <CR> "生成tag文件,喜欢的时候就按一下F8"
    "映射跳转快捷键,跳转到光标下单词的定义处,g]会列出跳转列表,如果需要自动跳转到第一个记录,则用map fj <C-]>"
    map fj g]
    "跳回之前的位置"
    map ff <C-T>


    <taglist>
    这个插件用来查看当前文件定义的变量、函数等信息, 挺有用的,被用得很泛滥.
    安装很简单,下载taglist.vim放入vim的plugin目录就可以了
    在vimrc中简单设置一些选项:(更多设置自己输入:help taglist.txt查看哦,记得之前要将taglist.txt放入vim的doc目录哦)
    "-------------------------------------------taglist-------------------------->>
    "快捷键"
    noremap <F11> :TlistToggle<CR>
    "以下是一些taglist设置"
    "设定windows系统中ctags程序的位置"
    if MySys() == "windows"
    "指定ctags程序的位置"
    let Tlist_Ctags_Cmd = 'ctags'
    elseif MySys() == "linux"
    let Tlist_Ctags_Cmd = '/usr/bin/ctags'
    endif
    "不同时显示多个文件的tag,只显示当前文件的"
    let Tlist_Show_One_File = 1
    "如果taglist窗口是最后一个窗口,则退出vim"
    let Tlist_Exit_OnlyWindow = 1
    "在右侧窗口中显示taglist窗口"
    let Tlist_Use_Right_Window = 1
    "设置按照名称排序,这样或许找函数名会容易些"
    Tlist_Sort_Type="name"
    "vim启动时自动打开taglist窗口"
    "Tlist_Auto_Open=1
    "打开taglist时焦点自动转到taglist窗口"
    "Tlist_GainFocus_On_ToggleOpen=1
    "让taglist始终解释文件中的tag,不管taglist窗口有没有打开"
    "Tlist_Process_File_Always=1


    <NERD_tree.vim>
    目录树, 同时还可以对文件进行vim的打开操作等.
    安装跟上面的一样,下载NERD_tree.vim放入vim的plugin目录.
    在vimrc中设置一下:
    "-------------------------------------------NERD_tree.vim--------------------->>
    "设置快捷键"
    nmap <F2> :NERDTreeToggle<cr>

    "禁用所有与NERD_tree有关的命令"
    "let loaded_nerd_tree=1
    "不显示指定的类型的文件"
    "let NERDTreeIgnore=['/.vim$', '/~$']
    "不显示隐藏文件(好像只在linux环境中有效)"
    let NERDTreeShowHidden=0
    "排序"
    let NERDTreeSortOrder=['//$','/.cpp$','/.c$', '/.h$', '/.py$', '/.lua$', '*']
    "不分大小写排序"
    let NERDTreeCaseSensitiveSort=0
    "设置窗口尺寸"
    let NERDTreeWinSize=30
    "是否显示行号"
    "let NERDTreeShowLineNumbers=1
    "是否显示书签"
    "let NERDTreeShowBookmarks=1
    "打开文件后, 关闭NERDTrre窗口"
    "let NERDTreeQuitOnOpen=1
    "高亮NERDTrre窗口的当前行"
    let NERDTreeHighlightCursorline=1


    <bufExplorer.vim>
    用来切换vim当前打开的文件的.
    安装如上,下载bufExplorer.vim放到vim的plugin目录下.
    在vimrc中设置一下:
    "-----------------------------------------bufExplorer.vim--------->>"
    noremap zz :BufExplorer<CR>


    安装了以上几个插件后,vim已经像模像样了,用起来也很方便了.<F2>打开目录浏览, <F11>打开taglist, <F5>生成tag,fj跳转,ff跳转返回 zz打开缓冲文件窗口


    vimrc文件
    vimrc文件配置得好的话,操作起来更方便快捷, 这个不多说了,附上我的vimrc文件:

    -------------------------------------------基本设定------------------------->>
    set fileencodings=ucs-bom,utf-8,cp936 "自动识别的文件编码
    set nocompatible "不兼容vi
    set magic
    set ru "标尺信息
    set ai "自动缩进
    set sw=4 "自动缩进宽度
    set ts=4
    set dy=lastline "显示最多行,不用@@
    set backspace=indent,eol,start
    colo evening
    sy on
    set go= "无菜单、工具栏
    set nobackup
    set hlsearch
    set incsearch
    set hls
    set showmatch
    set autochdir "需要自动改变vim的当前目录为打开的文件所在目录则设置此项
    set showcmd
    set smartindent
    set tags=tags; "设置tag文件的搜索路径
    set tags+=/usr/include/tags;
    filetype plugin on "支持插件
    set cursorline "当前行有下划线
    set virtualedit=onemore
    "set number "需要显示行号则设置该项
    "set path=.,/usr/include,include "vimgrep时额外的搜索路径
    "highlight Comment ctermfg=gray "设置注释的颜色
    "highlight Macro ctermfg=blue "设置宏定义的颜色
    "hi Folded ctermfg=red ctermbg=darkblue
    "hi FoldColumn guibg=green guifg=grey20 ctermfg=4 ctermbg=7

    "-------------------------------------------快捷键设置----------------------->>
    noremap <C-S> :update<CR>
    noremap <F5> :w<CR> :!Python %<CR>

    " 文件查找
    noremap <F3> :vimgrep /<C-R>=expand("<cword>")<CR>/j *.txt *.cpp *.h *.py *.java *.lua<CR> \| :copen<CR>
    noremap <F7> :vimgrep /<C-R>=expand("<cword>")<CR>/j **/*.txt **/*.cpp **/*.h **/*.py **/*.java **/*.lua<CR> \| :copen<CR>
    noremap <C-F7> :vimgrep /<C-R>=expand("<C-R>+")<CR>/j **/*.txt **/*.cpp **/*.h **/*.py **/*.java **/*.lua<CR> \| :copen<CR>

    " tabedit
    nmap te :tabedit
    nmap tn :tabnew<CR>
    noremap <TAB> :tabn<cr>


    "-------------------------------------------函数定义------------------------->>
    fun! ToggleFold()
    if foldlevel('.') == 0
    normal! l
    else
    if foldclosed('.') < 0
    . foldclose!
    else
    . foldopen!
    endif
    endif
    " Clear status line
    echo
    endfun

    "空格键折叠/展开折叠
    noremap <space> :call ToggleFold()<CR>

    function FoldBrace()
    if getline(v:lnum+1)[0] == '{'
    return 1
    endif
    if getline(v:lnum) =~ '{'
    return 1
    endif
    if getline(v:lnum)[0] =~ '}'
    return '<1'
    endif
    return -1
    endfunction
    if has("autocmd")
    filetype plugin indent on
    augroup vimrcEx
    au!
    autocmd FileType text setlocal textwidth=78
    autocmd BufReadPost *
    \ if line("'\"") > 0 && line("'\"") <= line("$") |
    \ exe "normal g`\"" |
    \ endif
    au BufReadPost *.h,*.hh,*.c,*.ec,*.cpp,*.hpp,*.ecpp,*.pc set foldexpr=FoldBrace()
    au BufReadPost *.h,*.hh,*.c,*.ec,*.cpp,*.hpp,*.ecpp,*.pc set foldmethod=expr
    au BufReadPost *.h,*.hh,*.c,*.ec,*.cpp,*.hpp,*.ecpp,*.pc set foldenable
    au BufWinLeave *.ztx mkview
    au BufWinEnter *.ztx silent loadview
    au BufNewFile,BufRead *.txt setf txt
    augroup END
    endif

    ""弹出窗口,让用户输入要查询的字串
    "在include 和 source目录中查找,你可以根据情况进行修改
    function s:Searchwordzx()
    let findstring = inputdialog("Search string: ",expand("<cword>"))
    if findstring != ""
    execute "vimgrep " findstring "*"
    endif

    endfunction

    ""========================================
    ""从sdir.txt中读入目录,并在这些目录下查找指定字串,
    "”sdir.txt要和源程序放在同一个目录下。
    function s:Searchwordglzx()
    let searchstring = expand("<cword>")

    let searchdir = ''
    for line in readfile("sdir.txt",'',6)
    let searchdir .= fnameescape(line).'*.[csh] '
    endfor

    if searchstring != ""
    execute "vimgrep " searchstring searchdir
    endif

    endfunction

    "=====================================================================插件=============================================================
    "-------------------------------------------ctags---------------------------->>
    noremap <F8> :!ctags -R --fields=+lS <CR>
    nmap fj g]
    nmap ff <C-T>

    "-------------------------------------------taglist.vim---------------------->>
    noremap <F11> :TlistToggle<CR>

    let Tlist_Show_One_File = 1
    let Tlist_Exit_OnlyWindow = 1
    let Tlist_Use_Right_Window = 1

    "-------------------------------------------NERD_tree.vim-------------------->>
    "设置快捷键"
    noremap <F2> :NERDTreeToggle<cr>

    "禁用所有与NERD_tree有关的命令"
    "let loaded_nerd_tree=1
    "不显示指定的类型的文件"
    "let NERDTreeIgnore=['/.vim$', '/~$']
    "不显示隐藏文件(好像只在linux环境中有效)"
    let NERDTreeShowHidden=0
    "排序"
    let NERDTreeSortOrder=['//$','/.cpp$','/.c$', '/.h$', '/.py$', '/.lua$', '*']
    "不分大小写排序"
    let NERDTreeCaseSensitiveSort=0
    "设置窗口尺寸"
    "let NERDTreeWinSize=30
    "是否显示行号"
    "let NERDTreeShowLineNumbers=1
    "是否显示书签"
    "let NERDTreeShowBookmarks=1
    "打开文件后, 关闭NERDTrre窗口"
    "let NERDTreeQuitOnOpen=1
    "高亮NERDTrre窗口的当前行"
    let NERDTreeHighlightCursorline=1

    "-------------------------------------------BufExplorer.vim------------------>>
    noremap zz :BufExplorer<CR>

    我的自定义配色方案文件(效果见第一张图):

    self.vim(将该文件放在vim的colors目录下,然后在vim中输入命令:colo self 即可切换到该配色方案,也可以在vimrc中指定)


    " Vim color file
    " Maintainer: Bram Moolenaar <Bram@vim.org>
    " Last Change: 2006 Apr 14

    " This color scheme uses a dark grey background.

    " First remove all existing highlighting.
    set background=dark
    hi clear
    if exists("syntax_on")
    syntax reset
    endif

    let colors_name = "self"

    hi Normal ctermbg=Black ctermfg=grey guifg=#c0c0c0 guibg=Black gui=none

    " Groups used in the 'highlight' and 'guicursor' options default value.
    hi ErrorMsg term=standout ctermbg=DarkRed ctermfg=White guibg=Red guifg=White
    hi IncSearch term=reverse cterm=reverse gui=reverse
    hi ModeMsg term=bold cterm=bold gui=bold
    hi StatusLine term=reverse,bold cterm=reverse,bold gui=none guifg=black guibg=#606060
    hi StatusLineNC term=reverse cterm=reverse gui=none guifg=black guibg=#606060
    hi VertSplit term=reverse cterm=reverse guifg=#606060 guibg=#606060 gui=none
    hi Visual term=reverse ctermbg=black guibg=#353535
    hi VisualNOS term=underline,bold cterm=underline,bold gui=underline,bold
    hi DiffText term=reverse cterm=bold ctermbg=Red gui=bold guibg=Red
    hi Cursor guibg=#dddddd guifg=Black
    hi lCursor guibg=Cyan guifg=Black
    hi Directory term=bold ctermfg=LightCyan guifg=lightgreen gui=underline
    hi LineNr term=underline ctermfg=cyan guifg=#388080
    hi MoreMsg term=bold ctermfg=LightGreen gui=bold guifg=SeaGreen
    hi NonText term=bold ctermfg=LightBlue guifg=LightBlue guibg=black
    hi Question term=standout ctermfg=LightGreen gui=bold guifg=Green
    hi Search term=reverse ctermbg=Yellow ctermfg=Black guibg=lightYellow guifg=Black
    hi SpecialKey term=bold ctermfg=LightBlue guifg=Cyan
    hi Title term=bold ctermfg=LightMagenta gui=bold guifg=Magenta
    hi WarningMsg term=standout ctermfg=LightRed guifg=Red
    hi WildMenu term=standout ctermbg=Yellow ctermfg=Black guibg=Yellow guifg=Black
    hi Folded term=standout ctermbg=LightGrey ctermfg=DarkBlue guibg=DarkGrey guifg=DarkBlue
    hi FoldColumn term=standout ctermbg=LightGrey ctermfg=DarkBlue guibg=Grey guifg=DarkBlue
    hi DiffAdd term=bold ctermbg=DarkBlue guibg=DarkBlue
    hi DiffChange term=bold ctermbg=DarkMagenta guibg=DarkMagenta
    hi DiffDelete term=bold ctermfg=Blue ctermbg=DarkCyan gui=bold guifg=Blue guibg=DarkCyan
    hi CursorColumn term=reverse ctermbg=Black guibg=grey40
    hi CursorLine term=underline cterm=underline guibg=#202020
    "语法关键字
    hi statement guifg=#005cff ctermfg=blue ctermbg=black gui=none
    hi preproc guifg=#005cff ctermfg=blue
    "类型关键字
    hi type guifg=#005cff ctermfg=blue ctermbg=black gui=none
    "注释
    hi comment guifg=green ctermfg=green ctermbg=black gui=none
    "常量
    hi Constant term=underline ctermfg=Magenta guifg=#ff8000 gui=none
    "数字
    hi Number term=underline ctermfg=Magenta guifg=Magenta gui=none
    "标识符,如lua中的function end if
    hi identifier guifg=#005cff ctermfg=red gui=none
    "标签
    hi label guifg=yellow ctermfg=yellow
    hi operator guifg=orange ctermfg=lightRed ctermbg=darkBlue
    hi TabLine guifg=black gui=none
    hi TabLineSel gui=none
    hi TabLineFill guibg=darkgrey gui=none
    hi MatchParen ctermbg=blue guibg=lightblue guifg=black
    hi Pmenu guibg=#101010 guifg=#909090 gui=none


    " Groups for syntax highlighting
    hi Special term=bold ctermfg=LightRed guifg=Orange guibg=grey5
    hi Ignore ctermfg=DarkGrey guifg=grey20


    " vim: sw=2

  • 相关阅读:
    slice和splice的区别
    Js中获取对象的所有key值
    设置layUI的时间laydate 结束时间大于开始时间
    vscode前端常用插件推荐,搭建JQuery、Vue等开发环境
    安装vue脚手架
    es6中...是什么意思
    html转义字符换行以及回车等的使用
    10款让人惊叹的HTML5/jQuery图片动画特效
    基于GIS技术的水利一张图平台
    BIM + 3D GIS在岩溶强发育区跨海盾构隧道施工中的实践应用
  • 原文地址:https://www.cnblogs.com/moodlxs/p/2415526.html
Copyright © 2011-2022 走看看