vim使用笔记

来源:互联网 发布:学象棋的软件 编辑:程序博客网 时间:2024/04/30 13:02

1.生成/查看帮助文档

:call pathogen#helptags():help Powerline

2.插件下载

进入 .vim/bundle/ 目录下

git clone http://github.com/scrooloose/nerdtree.git  

3.代码折叠
:za,打开或关闭当前折叠;zM,关闭所有折叠;zR,打开所有折叠

4.接口与实现快速切换
A 切换到.h文件
AS 切换回来

5.书签
独立书签,书签名只能由字母(a-zA-Z)组成,长度最多不超过 2 个字母,并且,同个文件中,不同独立书签名中不能含有相同字母。

分类书签,书签名只能由可打印特殊字符(!@#$%^&*())组成,长度只能有 1 个字符,同个文件中,你可以把不同行设置成同名书签,这样,这些行在逻辑上就归类成相同类型的书签了

vim-signature 快捷键如下:

let g:SignatureMap = {
\ ‘Leader’ : “m”,
\ ‘PlaceNextMark’ : “m,”,
\ ‘ToggleMarkAtLine’ : “m.”,
\ ‘PurgeMarksAtLine’ : “m-“,
\ ‘DeleteMark’ : “dm”,
\ ‘PurgeMarks’ : “mda”,
\ ‘PurgeMarkers’ : “m”,
\ ‘GotoNextLineAlpha’ : “’]”,
\ ‘GotoPrevLineAlpha’ : “’[“,
\ ‘GotoNextSpotAlpha’ : “]",
\ 'GotoPrevSpotAlpha' : "
[“,
\ ‘GotoNextLineByPos’ : “]’”,
\ ‘GotoPrevLineByPos’ : “[‘”,
\ ‘GotoNextSpotByPos’ : “mn”,
\ ‘GotoPrevSpotByPos’ : “mp”,
\ ‘GotoNextMarker’ : “[+”,
\ ‘GotoPrevMarker’ : “[-“,
\ ‘GotoNextMarkerAny’ : “]=”,
\ ‘GotoPrevMarkerAny’ : “[=”,
\ ‘ListLocalMarks’ : “ms”,
\ ‘ListLocalMarkers’ : “m?”
\ }

解释
书签设定: mx,设定/取消当前行名为 x 的标签;
书签罗列: ms,罗列出当前文件中所有书签,选中后回车可直接跳转;
书签跳转: mn, 按行号前后顺序,跳转至下个独立书签;mp,按行号前后顺序,跳转至前个独立书签。

6.内容替换

:[range]s/{pattern}/{string}/[flags]
  • 如果在当前文件内替换,[range] 不用指定,默认就在当前文件内;
  • 如果在当前选中区域,[range] 也不用指定,在你键入替换命令时,vim 自动将生成如下命令:
  • 你也可以指定行范围,如,第三行到第五行:
:3,5s/{pattern}/{string}/[flags]
  • 如果对打开文件进行替换,你需要先通过 :bufdo 命令显式告知 vim 范围,再执行替换;
  • 如果对工程内所有文件进行替换,先 :args */.cpp /*.h 告知 vim 范围,再执行替换;

封装函数

" 替换函数。参数说明:" confirm:是否替换前逐一确认" wholeword:是否整词匹配" replace:被替换字符串function! Replace(confirm, wholeword, replace)    wa    let flag = ''    if a:confirm        let flag .= 'gec'    else        let flag .= 'ge'    endif    let search = ''    if a:wholeword        let search .= '\<' . escape(expand('<cword>'), '/\.*$^~[') . '\>'    else        let search .= expand('<cword>')    endif    let replace = escape(a:replace, '/\&~')    execute 'argdo %s/' . search . '/' . replace . '/' . flag . '| update'endfunction" 不确认、非整词nnoremap <Leader>R :call Replace(0, 0, input('Replace '.expand('<cword>').' with: '))<CR>" 不确认、整词nnoremap <Leader>rw :call Replace(0, 1, input('Replace '.expand('<cword>').' with: '))<CR>" 确认、非整词nnoremap <Leader>rc :call Replace(1, 0, input('Replace '.expand('<cword>').' with: '))<CR>" 确认、整词nnoremap <Leader>rcw :call Replace(1, 1, input('Replace '.expand('<cword>').' with: '))<CR>nnoremap <Leader>rwc :call Replace(1, 1, input('Replace '.expand('<cword>').' with: '))<CR>

7.快速开关注释
插件:NERD Commenter
常用操作:

  • cc,注释当前选中文本,如果选中的是整行则在每行首添加 //,如果选中一行的部分内容则在选中部分前后添加分别 /、/;
  • cu,取消选中文本块的注释。
    其中在.vimrc中定义
let mapleader=";"

8.模板补全
插件:UltiSnips
先键入模板名(如,if),接着键入补全快捷键(默认 tab,后设置为<leader><tab>
在.vimrc中设置

" UltiSnips 的 tab 键与 YCM 冲突,重新设定let g:UltiSnipsExpandTrigger="<leader><tab>"let g:UltiSnipsJumpForwardTrigger="<leader><tab>"let g:UltiSnipsJumpBackwardTrigger="<leader><s-tab>"
0 0
原创粉丝点击