vim 用法

http://blog.csdn.net/namecyf/article/details/7787479 vim配置及插件

http://www.zhihu.com/question/35465970   知乎

set nu              " 显示行号

syntax on           " 语法高亮

"set background=dark "背景使用黑色

" 显示中文帮助
  if version >= 603
      set helplang=cn
      set encoding=utf-8
  endif

“字体

set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8
set fileencodings=ucs-bom,utf-8,cp936
set fileencoding=utf-8

" 自动缩进
set autoindent
set cindent

" Tab键的宽度
set tabstop=4

"设置tab键的标识符

set list
set listchars=tab:▸ ,trail:.,extends:>,precedes:<

" 统一缩进为4
set softtabstop=4
set shiftwidth=4

"禁止生成临时文件
set nobackup
set noswapfile

"搜索忽略大小写
set ignorecase

"搜索逐字符高亮
set hlsearch
set incsearch

"语言设置
set langmenu=zh_CN.UTF-8
set helplang=cn

colorscheme 配色方案

" 侦测文件类型
filetype on
" 载入文件类型插件
filetype plugin on

"无用空格高亮

highlight WhitespaceEOL ctermbg=red guibg=red
match WhitespaceEOL /s+$/

”取消粘贴时自动注释

set paste

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

"自动补全

:inoremap ( ()<ESC>i

:inoremap ) <c-r>=ClosePair(')')<CR>

:inoremap { {<CR>}<ESC>O

: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

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

"键盘命令

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""



nmap <leader>w :w!<cr>

nmap <leader>f :find<cr>



" 映射全选+复制 ctrl+a

map <C-A> ggVGY

map! <C-A> <Esc>ggVGY

map <F12> gg=G

" 选中状态下 Ctrl+c 复制

vmap <C-c> "+y

"去空行  

nnoremap <F2> :g/^s*$/d<CR>

"比较文件  

nnoremap <C-F2> :vert diffsplit

"新建标签  

map <M-F2> :tabnew<CR>  

"列出当前目录文件  

map <F3> :tabnew .<CR>  

"打开树状文件目录  

map <C-F3> e  

"C,C++ 按F5编译运行

map <F5> :call CompileRunGcc()<CR>

func! CompileRunGcc()

    exec "w"

    if &filetype == 'c'

        exec "!g++ % -o %<"

        exec "! ./%<"

    elseif &filetype == 'cpp'

        exec "!g++ % -o %<"

        exec "! ./%<"

    elseif &filetype == 'java'

        exec "!javac %"

        exec "!java %<"

    elseif &filetype == 'sh'

        :!./%

    endif

endfunc

"C,C++的调试

map <F8> :call Rungdb()<CR>

func! Rungdb()

    exec "w"

    exec "!g++ % -g -o %<"

    exec "!gdb ./%<"

endfunc

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

"""""新文件标题""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

"新建.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 append(line(".")+1, "## Author: Chen Cesc")

        call append(line(".")+2, "## Created Time: ".strftime("%c"))

        call append(line(".")+3, "#########################################################################")

        call append(line(".")+4, "#!/bin/bash")

        call append(line(".")+5, "")

    else

        call setline(1, " /*************************************************************************")

        call append(line("."), "    > File Name: ".expand("%"))

        call append(line(".")+1, "    > Author: Chen Cesc")

        call append(line(".")+2, "    > Created Time: ".strftime("%c"))

        call append(line(".")+3, " ************************************************************************/")

        call append(line(".")+4, "")

    endif

    if &filetype == 'cpp'

        call append(line(".")+5, "#include<iostream>")

        call append(line(".")+6, "using namespace std;")

        call append(line(".")+7, "")

        call append(line(".")+8, "int main()")

        call append(line(".")+9, "{")

        call append(line(".")+10, "}")

    endif

    if &filetype == 'c'

        call append(line(".")+5, "#include<stdio.h>")

        call append(line(".")+6, "")

        call append(line(".")+7, "int main()")

        call append(line(".")+8, "{")

        call append(line(".")+9, "}")

    endif

    "新建文件后,自动定位到文件末尾

    autocmd BufNewFile * normal G

endfunc

/*********************************************************************************************************************************************************/

命令行和快捷键操作:

w, b 向后,向前跳一个词

gd 和 ×一样搜索关键词

zz 当前行画面居中

Ctrl+a, 自动把光标下的数字加1。

1.h j k l              分别指左下上右

2.d$(end) d^(home)        删除至行尾,行首

3.添加字符:

  :n1,n2 s/^/字符/       行前加字符

  :.,+5 s/^/字符/

  (ctrl+v) + (I) + 字符 + (esc)  在块选模式下指定区域快速填充字符

4.替换:

  :s/old/new/g        当前行替换

  :%s/old/new/g       全文替换

  :n1,n2/old/new/g      指定行替换

  :%s/(good ice)/awesome/g  多文本替换

  :4,$ /d+/=submatch(0)+1/  把第4行到最后一行的第一个数字字符串加一

  :%s/.s*w/=toupper(submatch(0))/g  将每个句子的首字母变大写。 .s*w搜索模式,在句点后跟空格的第一个单词

5.r!(cmd)            将cmd 的内容写到当前行。

6.多窗口编辑

  :vsplit *.c          纵向

  :split *.c            横向

  vi -o *.c             为每个文件创建一个窗口

  纵向调整
  :ctrl+w + 纵向扩大(行数增加)
  :ctrl+w - 纵向缩小 (行数减少)
  :res(ize) num  例如::res 5,显示行数调整为5行
   :res(ize)+num 把当前窗口高度增加num行
   :res(ize)-num 把当前窗口高度减少num行
   横向调整
   :vertical res(ize) num 指定当前窗口为num列
   :vertical res(ize)+num 把当前窗口增加num列
   :vertical res(ize)-num 把当前窗口减少num列

  :previous 跳至上一个文件

  :n 跳至下一个文件,也可以直接指定要跳的文件,如:n c,可以直接跳到c文件
  :e# 回到刚才编辑的文件
  :Ex 开启目录浏览器,可以浏览当前目录下的所有文件,并可以选择
  :Sex 水平分割当前窗口,并在一个窗口中开启目录浏览器
  :ls 显示当前buffer情况

7.TlistToggle (标签列表窗口)

8.vimgrep(多文件查找)

  :vimgrep (search_thing) *.c  在当前.c文件中查找search_thing

  clist   -> cc(num)        列出所有查找到的项,cc(num)跳转到第几项

  cn              下一个匹配项

  cN              上一个匹配项

  clast/cfirst

 

  

原文地址:https://www.cnblogs.com/chencesc/p/4287546.html