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> \be
"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\nice\)/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