vim——编辑利器

来源:互联网 发布:淘宝的拍卖玉器可信吗 编辑:程序博客网 时间:2024/05/26 19:14

vim——编辑利器

关于vim,其实是一个永远聊不完的话题。

首先是编辑器之争,很可能又是vim和emacs之争,如果来到这里,那相比你已经认可vim了。
其实就编辑来说,我觉得用那个编辑器不是问题,重点在于用着顺手吧。
vim也是一样,有的人会说,嗯,你应该加上这个插件,有的人又说配这个插件功能很强大,关键还是自己用着顺手啊,没有任何一个配置是适合所有人的。所以说,授人以鱼不如授人以渔

那么vim的配置方法又如何呢,可以说相当的不简单
不同的人在不同的时间所钟情的配置方法各不相同,因为不同的人有不同的喜好,而相同的人又随着使用vim的深入,对各种功能的探索也愈盛,对vim的需求也会变化。

关于“渔”我就不多说了,后面的那个文档可以说是圣经级别的了。
而我是一名程序员,提下和程序相关的一点内容呗。

  • 移动用的熟练了,hjkl绝对是王道,使用vim的vimer们恐怕没有任何一个让不认可这一点吧,我觉得这是vim最吸引我的一个特性,以至于我浏览网页及看pdf文档时都想要使用着几个按键。还好有firefox和chromium的vim插件,而debian发行版带的pdf阅读器也是支持这四个键跳转的,神奇啊。看文档时基本可以摆脱鼠标之束缚了。。。
  • 跳转%在括号间跳转啊,[[及][在函数首尾跳转啊,gg及G在文件首尾跳转啊,再有m..加标记与~..跳到标记,~n打开上几次的位置啊这些,熟练运用绝对可以大大提高效率的。
  • 列编辑呃,也许会用到吧,ctrl+v进入block visual模式,选择多列后使用I进入多列的插入模式,插入的字符就会自动在多列了。
  • 中文编码
    与编码相关的几个变量
    1.encoding屏幕显示的编码,如使用utf-8做locale的系统,encoding就应是utf-8以方便显示。
    2.fileencodings供vi尝试的编码列表,vi会逐个尝试每一项,如果没有发生错误,就设置当前的fileencoding为与该项相同的值。如果均失败,fileencoding将为空。
    3.fileencoding正在被编辑的文件的编码,它也决定新文件的编码。如果为空,表示与encoding相同。如果与encoding不同,vi将会在保存和读取时做二者之间的转换。因此可做如下设置:

    " 设置新文件的编码为 UTF-8set fileencoding=utf8 " 自动判断编码时,依次尝试以下编码:set fileencodings=ucs-bom,gb18030,utf-8,default " gb18030 最好在 UTF-8 前面,否则其它编码的文件极可能被误识为 UTF-8
  • 空白的处理
    与缩进相关的几个设置如下:

    变量名             缩写          含义(no)autoindent     ai    自动缩进,即为新行自动添加与当前行同等的缩进。(no)cindent       ci     类似C语言程序的缩进(no)smartindent    si    基于autoindent的一些改进

    与tab相关的几个设置项如下:

    变量名          缩写      含义tabstop=X        ts      编辑时一个TAB字符占多少个空格的位置。shiftwidth=X     sw      使用每层缩进的空格数。(no)expandtab    (no)et      是否将输入的TAB自动展开成空格。开启后要输入TAB,需要Ctrl-V<TAB>softtabstop=X    sts         方便在开启了et后使用退格(backspace)键,每次退格将删除X个空格(no)smarttab     (no)sta         开启时,在行首按TAB将加入sw个空格,否则加入ts个空格。

    这样只要结合自己的需要作相应的设置就可以了。* 帮助
    vim的绝大多数的设置,在你不清楚时可以使用:help xxx来获得帮助吧。

其他的如跳转啊,搜索替换啊,复制粘贴啊等等的就不多说了,反正文档里也有:
vim用户手册中文版
另附上我的vimrc脚本以供参考哈,莫笑~~
(另需安装tagbar插件,请自行去vim官网下载,安装方法:so % )
[My vimrc]

  1   2 " When started as "evim", evim.vim will already have done these settings.  3 if v:progname =~? "evim"  4     finish  5 endif  6   7 " Use Vim settings, rather than Vi settings (much better!).  8 " This must be first, because it changes other options as a side effect.  9 set nocompatible 10  11 " allow backspacing over everything in insert mode 12 set backspace=indent,eol,start 13  14 set history=50      " keep 50 lines of command line history 15 set ruler       " show the cursor position all the time 16 set showcmd     " display incomplete commands 17 set incsearch       " do incremental searching 18  19 " For Win32 GUI: remove 't' flag from 'guioptions': no tearoff menu entries 20 " let &guioptions = substitute(&guioptions, "t", "", "g") 21  22 " Don't use Ex mode, use Q for formatting 23 map Q gq 24  25 " CTRL-U in insert mode deletes a lot.  Use CTRL-G u to first break undo, 26 " so that you can undo CTRL-U after inserting a line break. 27 inoremap <C-U> <C-G>u<C-U> 28  29 " Switch syntax highlighting on, when the terminal has colors 30 " Also switch on highlighting the last used search pattern. 31 if &t_Co > 2 || has("gui_running") 32     syntax on 33     set hlsearch 34 endif 35  36 " Only do this part when compiled with support for autocommands. 37 if has("autocmd") 38  39     " Enable file type detection. 40     " Use the default filetype settings, so that mail gets 'tw' set to 72, 41     " 'cindent' is on in C files, etc. 42     " Also load indent files, to automatically do language-dependent indenting. 43     filetype plugin indent on 44  45     " Put these in an autocmd group, so that we can delete them easily. 46     augroup vimrcEx 47         au! 48  49         " For all text files set 'textwidth' to 78 characters. 50         autocmd FileType text setlocal textwidth=78 51  52         " When editing a file, always jump to the last known cursor position. 53         " Don't do it when the position is invalid or when inside an event handler 54         " (happens when dropping a file on gvim). 55         " Also don't do it when the mark is in the first line, that is the default 56         " position when opening a file. 57         autocmd BufReadPost * 58                     \ if line("'\"") > 1 && line("'\"") <= line("$") | 59                     \   exe "normal! g`\"" | 60                     \ endif 61  62     augroup END 63  64 else 65  66     set autoindent      " always set autoindenting on 67  68 endif " has("autocmd") 69  70 " Convenient command to see the difference between the current buffer and the 71 " file it was loaded from, thus the changes you made. 72 " Only define it when not defined already. 73 if !exists(":DiffOrig") 74     command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ | diffthis 75                 \ | wincmd p | diffthis 76 endif 77  78 set backspace=indent,eol,start 79  80 """""""""""""""""""""""""""""" 81 " BufExplorer 82 """""""""""""""""""""""""""""" 83 let g:bufExplorerDefaultHelp=0       " Do not show default help. 84 let g:bufExplorerShowRelativePath=1  " Show relative paths. 85 let g:bufExplorerSortBy='mru'        " Sort by most recently used. 86 let g:bufExplorerSplitRight=0        " Split left. 87 let g:bufExplorerSplitVertical=1     " Split vertically. 88 let g:bufExplorerSplitVertSize = 30  " Split width 89 let g:bufExplorerUseCurrentWindow=1  " Open in new window. 90 autocmd BufWinEnter \[Buf\ List\] setl nonumber 91  92 " Something about project manage with vim 93 " autosave 94 "au VimLeave *.[chs],*.cc mksession! .proj.session 95 "au VimLeave *.[chs],*.cc wviminfo! .proj.viminfo 96  97 if filereadable("tags") 98     set tags+=tags 99 endif100 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""101 " cscope setting102 " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""103 if has("cscope")104     set cscopetag105     set csto=1106     set cst107     set nocsverb108     " add any database in current directory109     if filereadable("cscope.out")110         cs add cscope.out111     endif112     set csverb113 endif114 if filereadable("tags")115     set tags=tags116 endif117 118 set cscopequickfix=s-,c-,d-,i-,t-,e-119 nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>120 nmap <C-@>g :cs find g <C-R>=expand("<cword>")<CR><CR>121 nmap <C-@>c :cs find c <C-R>=expand("<cword>")<CR><CR>122 nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR>123 nmap <C-@>e :cs find e <C-R>=expand("<cword>")<CR><CR>124 nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR>125 nmap <C-@>i :cs find i <C-R>=expand("<cfile>")<CR>$<CR>126 nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>127 128 let g:tagbar_width = 30129 let g:tagbar_autoclose = 1130 let g:tagbar_autofocus = 1131 nmap <F2> :TagbarToggle<CR>132 "set background=dark133 noremap <F3> :set nonumber!<CR>:set foldcolumn=0<CR>134 135 " tab占用空格位置数136 set tabstop=4137 " 每层缩进占用空格数138 set shiftwidth=4139 " tab自动展开为空格140 set expandtab141 " 每次退格删除x个空格142 set softtabstop=4143 " 行首按tab插入shiftwidth个空格,否则为tabstop个144 set smarttab145 146 " no copy indent147 set nocp148 set autowrite149 set hidden150 set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s151 set number152 153 "show cur file name154 set statusline+=%f 155 " auto scoll when 7 lines to the boundary156 set so=7157 " show matched '({['158 set showmatch159 "auto fold160 set fdm=syntax161 set nofen162 " search ignore case163 set ignorecase164 165 166 " auto preview,maybe no use167 set previewheight=10168 set updatetime=2000169 nmap <C-@>p :call PreviewWord()<CR>1<CR><CR>170 "au! CursorHold *.[ch] nested call PreviewWord()171 func PreviewWord()172     if &previewwindow           " don't do this in the preview window173         return174     endif175     let w = expand("<cword>")       " get the word under cursor176     if w =~ '\a'            " if the word contains a letter177 178         " Delete any existing highlight before showing another tag179         silent! wincmd P            " jump to preview window180         if &previewwindow           " if we really get there...181             match none          " delete existing highlight182             wincmd p            " back to old window183         endif184 185         " Try displaying a matching tag for the word under the cursor186         try187             exe "ptag! " . w188         catch189             return190         endtry191 192         silent! wincmd P            " jump to preview window193         if &previewwindow       " if we really get there...194             if has("folding")195                 silent! .foldopen       " don't want a closed fold196             endif197             call search("$", "b")       " to end of previous line198             let w = substitute(w, '\\', '\\\\', "")199             call search('\<\V' . w . '\>')  " position cursor on match200             " Add a match highlight to the word at this position201             hi previewWord term=bold ctermbg=green guibg=green202             exe 'match previewWord "\%' . line(".") . 'l\%' . col(".") . 'c\k*"'203             wincmd p            " back to old window204         endif205     endif206 endfun207 
原创粉丝点击