Chinaunix首页 | 论坛 | 博客
  • 博客访问: 778580
  • 博文数量: 230
  • 博客积分: 6330
  • 博客等级: 准将
  • 技术积分: 2188
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-10 15:55
个人简介

脚踏实地

文章分类

全部博文(230)

文章存档

2017年(1)

2016年(7)

2015年(10)

2014年(32)

2013年(24)

2012年(33)

2011年(50)

2010年(30)

2009年(43)

分类: LINUX

2010-01-07 10:12:55

http://easwy.com/blog/archives/advanced-vim-skills-catalog/
非常好的链接

VIM中常用的替换模式总结:

1,简单替换表达式  

:%s/four/4/g

“%” 范围前缀表示在所有行中执行替换。最后的 “g” 标记表示替换行中的所有匹配点。如果仅仅对当前行进行操作,那么只要去掉%即可

用 “\<” 来指定匹配单词开头:

       :%s/\

显然,这样在处理 “fourty” 的时候还是会出错。用 “\>” 来解决这个问题:

       :%s/\/4/g

如果你在编码,你可能只想替换注释中的 “four”,而保留代码中的。由于这很难指定,可以在替换命令中加一个 “c” 标记,这样,Vim 会在每次替换前提示你:

       :%s/\/4/gc

2,删除多余的空格

要删除这些每行后面多余的空格,可以执行如下命令:

       :%s/\s\+$//

“\s\+$”表示行末($)前的一个或者多个(\+)空格(\s)。替换命令的 “to” 部分是空的:”//”。这样就会删除那些匹配的空白字符。


3,匹配重复性模式

星号项 “*” 规定在它前面的项可以重复任意次,和windows中的*不一样阿!

       /a*

匹配 “a”,”aa”,”aaa”,等等。但也匹配 “” (空字串),因为零次也包含在内。星号 “*” 仅仅应用于那个紧邻在它前面的项。因此 “ab*” 匹配 “a”,”ab”,”abb”,”abbb”,等等。如要多次重复整个字符串,那么该字符串必须被组成一个项。组成一项的方法就是在它前面加 “\(”,后面加 “\)”。因此这个命令:

       /\(ab\)*

匹配: “ab”,”abab”,”ababab”,等等。而且也匹配 “”。

要避免匹配空字串,使用 “\+”。这表示前面一项可以被匹配一次或多次。

       /ab\+

匹配 “ab”,”abb”,”abbb”,等等。它不匹配 后面没有跟随 “b” 的 “a”。

要匹配一个可选项,用 “\=”。 例如:

       /folders\=

匹配 “folder” 和 “folders”。

4,指定重复次数

要匹配某一项的特定次数重复,使用 “\{n,m}” 这样的形式。其中 “n” 和 “m” 都是数字。在它前面的那个项将被重复 “n” 到 “m” 次 (|inclusive| 包含 “n” 和 “m”)。例如:

       /ab\{3,5}

匹配 “abbb”,”abbbb” 以及 “abbbbb”。

  当 “n” 省略时,被默认为零。当 “m” 省略时,被默认为无限大。当 “,m” 省略时,就表示重复正好 “n” 次。例如:

       模式          匹配次数

       \{,4}           0,1,2,3 或 4

       \{3,}           3,4,5,等等

       \{0,1}          0 或 1,同 \=

       \{0,}           0 或 更多,同 *

       \{1,}           1 或 更多,同 \+

       \{3}            3

5,查找匹配

在一个查找模式中,”或” 运算符是 “\|”。例如:

       /foo\|bar

这个命令匹配了 “foo” 或 “bar”。更多的抉择可以连在后面:

       /one\|two\|three

匹配 “one”,”two” 或 “three”。

  如要匹配其多次重复,那么整个抉择结构须置于 “\(” 和 “\)” 之间:

       /\(foo\|bar\)\+

这个命令匹配 “foo”,”foobar”,”foofoo”,”barfoobar”,等等。

  再举个例子:

       /end\(if\|while\|for\)

这个命令匹配 “endif”,”endwhile” 和 “endfor”。


查找块
\_.* :匹配多个换行符
\@!: 遇到某个标识符停止
 
/key\_.*key:匹配多行

------------------大小写的问题--------------

用vim处理字符的大小写转换
平时在写程序时经常会遇到大小写转换的问题,vim中提供了很多非常方便的大小写转换命令,可以快速的进行字母、单词、 任意行的大小写转换,可以和vim的光标移动指令组合使用。

~ 将光标下的字母改变大小写
3~ 将光标位置开始的3个字母改变其大小写
g~~ 改变当前行字母的大小写
U 将可视模式下选择的字母全改成大写字母
u 将可视模式下选择的字母全改成小写
gUU 将当前行的字母改成大写
3gUU 将从光标开始到下面3行字母改成大写
guu 将当前行的字母全改成小写
gUw 将光标下的单词改成大写。
guw 将光标下的单词改成小写。


vim中大小写转化的命令是gu或者gU
形象一点的解释就是小u意味着转为小写;大U意味着转为大写.

剩下的就是对这两个命令的限定(限定操作的行,字母,单词)等等

1、整篇文章大写转化为小写
打开文件后,无须进入命令行模式。键入:ggguG

解释一下:ggguG分作三段gg gu G
gg=光标到文件第一个字符
gu=把选定范围全部小写
G=到文件结束

2、整篇文章小写转化为大写
打开文件后,无须进入命令行模式。键入:gggUG

解释一下:gggUG分作三段gg gU G
gg=光标到文件第一个字符
gU=把选定范围全部大写
G=到文件结束

3、只转化某个单词

guw 、gue
gUw、gUe
这样,光标后面的单词便会进行大小写转换
想转换5个单词的命令如下:
gu5w、gu5e
gU5w、gU5e

4、转换几行的大小写

将光标定位到想转换的行上,键入:1gU 从光标所在行 往下一行都进行小写到大写的转换
10gU,则进行11行小写到大写的转换
以此类推,就出现其他的大小写转换命令
gU0  


vim中的粘贴板
vim(我这是GVIM)有17个粘贴板,分别是"、 0、1、2、...、9、-、*、+、. 、 : 、/:: ;用:reg命令可以查看各个粘贴板里的内容。在vim中简单用y只是复制到“(双引号)粘贴板里,同样用p粘贴的也是这个粘贴板里的内容;
要将vim的内容复制到某个粘贴板,需要退出编辑模式,进入正常模式后,选择要复制的内容,然后按"Ny完成复制,其中N为粘贴板号(注意是按一下双引号然后按粘贴板号最后按y),例如要把内容复制到粘贴板a,选中内容后按"ay就可以了,有两点需要说明一下:
VIM内部("):”号粘贴板(临时粘贴板)比较特殊,直接按y就复制到这个粘贴板中了,直接按p就粘贴这个粘贴板中的内容(也可以说是VIM专用吧);
与外部程序交互(*/+):+号粘贴板是系统粘贴板,用"+y将内容复制到该粘贴板后可以使用Ctrl+V将其粘贴到其他文档(如firefox、gedit)中,同理,要把在其他地方用Ctrl+C或右键复制的内容复制到vim中,需要在正常模式下按"+p
要将vim某个粘贴板里的内容粘贴进来,需要退出编辑模式,在正常模式按"Np,其中N为粘贴板号,如上所述,可以按"5p将5号粘贴板里的内容粘贴进来,也可以按"+p("+* 也行)将系统全局粘贴板里的内容粘贴进来。

返回之前的位置:
两个单引号''或者Ctrl-O

关于映射的更多内容需要参考
:h key-notation
:h map

 Insert  Command-line Lang-Arg ~
:map!  :noremap!  :unmap!  :mapclear!    yes       yes   -
:imap  :inoremap  :iunmap  :imapclear    yes -   -
:cmap  :cnoremap  :cunmap  :cmapclear     -       yes   -
:lmap  :lnoremap  :lunmap  :lmapclear    yes*       yes*  yes*



Vim下的跳转练习:
http://blog.csdn.net/moiyer/article/details/5439976


跳转到函数、变量定义处: 
[+ctrl+i 跳转到函数、变量和#define
[+ctrl+d 跳转到#define处
ctrl+i 向前跳到前几次光标位置
ctrl+o 向后跳到后几次光标位置
vim 跳到函数开头或结尾:[[对于{不单独一行的程序是无法跳转到函数开头的。
1: 跳到函数头 [{
2: 跳到函数尾 ]}

$1自动加小括号
函数体跳转: 
[[
]]
[]
][
{}

'       跳转前的位置 
 "       最后编辑的位置 
[       最后修改的位置的开头 
]       最后修改的位置的结尾 

`. – 跳转到上次修改的行、列位置。
‘. – 跳转到上次修改的行位置。

5.
如何查看系统信息?

cat /proc/meminfo(cpuinfo/pci...)

6.查看目录的大小?

du -sh dir

9.在多级目录中查找某个文件的方法?

1 find /dir -name filename.ext 

2 du -a | grep filename.ext 

3 locate filename.ext 

10.用ls只列出目录?

ls -lF | grep ^d 

ls -lF | grep /$ 

ls -F | grep /$ 


11. 关于vim分割窗口的大小

vim 竖向分割窗口时调整窗口大小的操作
看过的教程中,关于分割窗口的操作,一般都只说到横向分割窗口的各种操作:
CTRL_W + 窗口边界上移
CTRL_W - 窗口边界下移
CTRL_W _ 将当前窗口调到最大
CTRL_W = 平分窗口 
可是我多数时候倾向用vsp。这时,按键是不同的:
CTRL_W < 窗口边界左移
CTRL_W > 窗口边界右移
CTRL_W | 将当前窗口调到最大
CTRL_W = 平分窗口,这个快捷键是通用的。

12. 保存工程的状态
else 
gvim $1 
fi 


当用gvim编辑完后,退出是,文件是以当前子窗口的名字保存窗口信息的,所以下次打开时,要用那个窗口名字作为gvims的参数.


这样的话, 对于一个项目的编辑非常有用. 例如: 我们现在做一个项目,名字是storm. 我们切换到项目storm所在的目录,运行 gvims storm. 这样就会打开一个gvim窗口,然后我们用 命令 :new storm.c 回车, 然后有输入命令 :vert new storm.h. 然后调整窗口大小,编辑,保存. 现在我们这个gvim窗口里有三个子窗口,一个显示storm, 一个显示storm.c,一个显示storm.h. 这时,我们切换到storm的编辑窗口,然后我们输入命令 :qa 退出gvim. 过了几天,我们可能要重新编辑项目storm,这是 你在任一个目录下(不一定是 项目storm的目录), 输入shell命令 
gvims storm (如果你还记得你的项目名字是storm的话 (= ). 当gvim运行后,你会发现你的gvim显示的状态就象你几天前没退出一样. enjoy!


13. 关于引入session后mark.vim 失效的问题
13.1 我在gvim中用的是dessert配色方案,需要在/usr/share/vim/vim72/colors/desert.vim的最后加入就可以
" For mark.vim plugin
    highlight def MarkWord1  ctermbg=Cyan     ctermfg=Black  guibg=#8CCBEA    guifg=Black
    highlight def MarkWord2  ctermbg=Green    ctermfg=Black  guibg=#A4E57E    guifg=Black
    highlight def MarkWord3  ctermbg=Yellow   ctermfg=Black  guibg=#FFDB72    guifg=Black
    highlight def MarkWord4  ctermbg=Red      ctermfg=Black  guibg=#FF7272    guifg=Black
    highlight def MarkWord5  ctermbg=Magenta  ctermfg=Black  guibg=#FFB3FF    guifg=Black
    highlight def MarkWord6  ctermbg=Blue     ctermfg=Black  guibg=#9999FF    guifg=Black

13.2 据说一个mark.vim的bug
gvim 7.1.298 for Windows,mark.vim 现在按 \m 不灵或者全都高亮成前景色 ???

不知道哪里把 :hi MarkWord 的高亮设置清掉了,把 mark.vim 开头的六个 
:hi 设置移到 function! s:InitMarkVariables() 函数的 
     let g:mwHistAdd = "/@" 
后就好了。


14 TagList 常用命令
         跳到光标下tag所定义的位置,用鼠标双击此tag功能也一样
o             在一个新打开的窗口中显示光标下tag
      显示光标下tag的原型定义
u             更新taglist窗口中的tag
s             更改排序方式,在按名字排序和按出现顺序排序间切换
x             taglist窗口放大和缩小,方便查看较长的tag
+             打开一个折叠,同zo
-             将tag折叠起来,同zc
*             打开所有的折叠,同zR
=             将所有tag折叠起来,同zM
[[            跳到前一个文件
]]            跳到后一个文件
q             关闭taglist窗口
         显示帮助

15. 关于fileExplorer
http://www.cnblogs.com/ifys/archive/2010/10/24/1860610.html
winmanager自带的fileexplorer这个插件实在是比较差。最重要的一点是fileexplorer不能自动更新,如果通过其他的途径修改了文件夹中的内容,fileexplorer是不会显示的。相对而言Nerd_Tree功能就比较强大了。下面要把Nerd_Tree加入winmanager。

Nerd_tree:下载解压,打开NERD_tree.vim,按照winmanager的说明,在最后加入下面代码:

"Used by winmanager {{{1
let g:NERDTree_title = "[NERDTree]" 
function! NERDTree_Start() 
    exe 'NERDTree'
endfunction 

function! NERDTree_IsValid() 
return 1 
endfunction


同时把在vimrc中:
let g:winManagerWindowLayout='NERDTree|TagList,BufExplorer'

至于”nerdtree 多一个buffer“,一搜便解决方案,我不折腾了,具体可参考:

www.cnblogs.com/ifys/archive/2010/10/24/1860610.html


16 VIM缓冲区使用方法
打开多个文件后,使用命令 :ls 或者 :buffers 来查看缓冲区的文件列表。最前面是序号,第二列是 缓存文件状态,第三列,文件名(不一定有名字),第四列,在对应的缓存区里面,鼠标当前所处的位置。


缓存文件状态有以下属性:


a 表示激活的缓冲区
h 表示隐藏的缓冲区
% 代表当前缓冲区
# 代表交换缓冲区
= 代表吟诗缓冲区
+ 代表已修改过的缓冲区
打开某个缓冲区使用 :buffer num num代表缓冲区编号 也可以用 :buffer file 直接指定文件名。
在不同缓冲区之间切换使用 CTRL+^ ,当然也可以使用 左右方向键(不推荐)。


在新窗口里面打开 某个特点的缓冲区使用 :sbuffer num/file 命令。
转到下一个缓冲区使用 :bnext
转到上一个缓冲区使用 :bpre
转到最后一个缓冲区使用 :blast
转到第一个缓冲区使用 :bfirst
删除一个缓冲区使用 :bdele
卸载一个缓冲区使用 :bunload

17 vim书签

:delm[arks]  删除某一书签
  :delmarks a      deletes mark a
  :delmarks a b 1    deletes marks a, b and 1
  :delmarks Aa       deletes marks A and a
  :delmarks p-z      deletes marks in the range p to z
  :delmarks ^.[]     deletes marks ^ . [ ]
  :delmarks \"      deletes mark "
< {not in Vi}

:delm[arks]! 删除所有书签
A-Z or 0-9.
{not in Vi}



ma – 创建一个书签,标记为a,如果你要创建全局书签,要用大写字母。
`a – 跳转到书签a所在的行、列位置,a是你创建时候使用的字母。
‘a – 跳转到书签a所在的行位置。
:marks – 显示所有的书签。


引入两个插件

我的vim 7.0在切换到其它缓冲区然后再切换回来时,原来被标记的文本会失去高亮。而作者说他并不存在此问题。如果你存在类似的问题,可以打上我所加的补丁:

    
--- easwy/mark.vim	2006-12-01 13:02:18.000000000 +0800
+++ plugin/mark.vim	2007-03-23 10:22:02.000000000 +0800
@@ -440,6 +440,43 @@
 	endif
 endfunction
 
+" easwy add
+" return the mark string under the cursor. multi-lines marks not supported
+function! RedoMarkWord()
+	" define variables if they don't exist
+	call s:InitMarkVariables()
+
+	let i = 1
+  while i <= g:mwCycleMax
+    if b:mwWord{i} != ""
+      " quote regexp with / etc. e.g. pattern => /pattern/
+      let quote = "/?~!@#$%^&*+-=,.:"
+      let j = 0
+      while j < strlen(quote)
+        if stridx(b:mwWord{i}, quote[j]) < 0
+          let quoted_regexp = quote[j] . b:mwWord{i} . quote[j]
+          break
+        endif
+        let j = j + 1
+      endwhile
+      if j >= strlen(quote)
+        return -1
+      endif
+
+      " highlight the word
+      exe "syntax clear MarkWord" . i
+      exe "syntax match MarkWord" . i . " " . quoted_regexp . " containedin=ALL"
+    endif
+    let i = i + 1
+  endwhile
+endfunction
+
+augroup markword
+  autocmd!
+  autocmd BufWinEnter * call RedoMarkWord()
+augroup END
+" easwy end
+
 " Restore previous 'cpo' value
 let &cpo = s:save_cpo  

用法:
保存该patch到某一目录,例如:/tmp/mark.vim.patch
    cd到你的.vim目录:cd ~/.vim
    运行命令:cat /tmp/mark.vim.patch | patch -p0
由于用的是最新版1.1.8-g注意要把b:mwWord 改成 g:mwWord

×××关于颜色的设置参考:http://easwy.com/blog/archives/advanced-vim-skills-syntax-on-colorscheme/
我用的是新建color目录,名为desert_my.vim

18 折叠命令
zf 手动创建折叠
zo 将当前折叠打开
zO 对所在范围内所有嵌套的折叠点展开
zc 折叠光标所在处(不一定有效,但是条件不清楚,有括号的时候可以成功)
zm 折叠所有层次(依层次折叠)   
zM 折叠所有 (依层次折叠)
zr 打开所有折叠层次(依层次打开)
zR 打开所有折叠 (依层次打开)
zi 切换折叠与不折叠指令
zj 向下移动。到达下一个折叠的开始处。关闭的折叠也被计入
zk 向上移动到前一折叠的结束处。关闭的折叠也被计入
zd 删除折叠(其实在折叠上面dd就可以删除了)
zD 删除所有折叠


19 doxygentoolkit.vim的使用
Copy to your '~/.vim/plugin' directory
"doxygen toolkit 
let g:DoxygenToolkit_briefTag_pre="@synopsis  "
let g:DoxygenToolkit_paramTag_pre="@param "
let g:DoxygenToolkit_returnTag="@returns   "
let g:DoxygenToolkit_blockHeader="--------------------------------------------------------------------------"
let g:DoxygenToolkit_blockFooter="----------------------------------------------------------------------------"
let g:DoxygenToolkit_authorName="Drunkedcat"
let g:DoxygenToolkit_licenseTag="GPL 2.0"


let g:DoxygenToolkit_authorName="drunkedcat, whitelilis@gmail.com"
let s:licenseTag = "Copyright(C)\"
let s:licenseTag = s:licenseTag . "For free\"
let s:licenseTag = s:licenseTag . "All right reserved\"
let g:DoxygenToolkit_licenseTag = s:licenseTag
let g:DoxygenToolkit_briefTag_funcName="yes"
let g:doxygen_enhanced_color=1

看了下它的命令,常用的也就是两个:
光标在函数上,用 :Dox 自动生成函数的说明。
光标在文件头,用 :DoxAthor 自动生成文件说明。


20. MiniBufExplorer相关的命令
:e 打开文件
:ls    当前打开的buf
:bn    下一个buf
:bp    前一个buf
:b    n是数字,第n个buf
:b    自动补齐
:bd    删除buf


21. Bundle来管理插件
http://www.cnblogs.com/pigzhu/p/3320755.html

可以知道安装插件有4种方式:

  • 代码库放在github上

            Bundle 'tpope/vim-fugitive'

            Bundle 'Lokaltog/vim-easymotion'

  •  代码库在vim script上

            Bundle 'L9'

            Bundle 'FuzzyFinder'

  • 3. 代码库在其他git库上

             Bundle 'git://git.wincent.com/command-t.git'

  • 4. 当你自己写了个定制的插件,放在本地的时候

             Bundle 'file:///Users/gmarik/path/to/plugin'


几个常用的命令:

  :BundleInstall    安装插件

  :BundleInstall!   更新插件

  :BundleClean(!)     卸载不在.vimrc配置列表中的插件

  :BundleSearch(!)    搜索插件

  :BundleList    显示已安装插件列表


在windows下用:BundleSearch 这个命令时碰到一个问题:

从错误提示可以看到:curl 和 wget 两者都不可用,只需要其中一个就可以。对于curl,可以去curl的官网http://curl.haxx.se/下载,还有个简单的解决办法,因为要用Vundle插件,肯定就已经安装了Git,在git的bin目录下有curl.exe,所以只需要把该bin目录放到path路径下,即可。

保存退出后,打开一个vim窗口。在命令模式下输入
             :BundleList    //会显示你vimrc里面填写的所有插件名称
             :BundleInstall  //会自动下载安装或更新你的插件。

要删除一个插件也很简单,先在~/.vimrc中移除该插件条目,然后进入vim执行命令:BundleClean。嘿嘿,vundle将自动清除掉插件的文件夹!
PS: 和 这两个网站上都是vim-scripts的插件,即你只需在vimrc中添加你想要的插件名称即可。


22.  YouCompleteMe的安装
按照http://blog.csdn.net/dongjideyu/article/details/12617351来安装
YCM需要最新版本Vim(7.3.584)的支持,从代码编译Vim的方法看这里。
使用Vundle安装 youcompleteme后,需要先编译才能使用。
cd ~/.vim/bundle/YouCompleteMe
要在源码文件夹中 git submodule update --init --recursive
./install.sh --clang-completer
语意补全要正确工作,需要配置好.ycm_extra_conf.py文件,模板在这里。可以把这个文件放在项目的根目录下,打开项目文件时,YCM会循环向上搜索并加载这个文件,或者在vimrc文件中加入
let g:ycm_global_ycm_extra_conf = 'your path to .ycm_extra_conf.py'
如果.ycm_extra_conf.py中include path等配置没有问题,YCM已经可以工作了。

注意:在一些老的Linux版本上建议直接手动编译,首先确定下载下来的libclang能不能链接好?
 ldd /data/home/×××/.vim/bundle/YouCompleteMe/third_party/ycmd/libclang.so
如果不行的话首先要编译自己平台下的libclang,平台为centos 6.5,

1. 下载三个组件
,然后要整理一下目录。一系列mv
 llvm+clang+compiler-rt 是分开的,llvm+clang 是必需的。假设 llvm 在 llvm 目录下,那么 clang 应该是在 llvm/tools 下,compiler-rt 是在 llvm/projects 下

点击(此处)折叠或打开

  1. mv clang-3.4 clang
  2. mv clang-tools-extra-3.4 extra
  3. mv compiler-rt-3.4 compiler-rt
  4. mv clang llvm-3.4/tools
  5. mv extra llvm-3.4/tools/clang
  6. mv compiler-rt llvm-3.4/projects
然后指定生成的目录:
../llvm-3.4/configure --prefix=/home/×××/mylib64/llvm --enable-optimized --enable-targets=host-only
然后
make -j4
make install

下面的参考:http://blog.csdn.net/leaf5022/article/details/21290509
节选如下:
cd ~
          mkdir ycm_build
          cd ycm_build
          cmake -G "Unix Makefiles" -DEXTERNAL_LIBCLANG_PATH=PATH of libclang.so   ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
          make ycm_core
          make ycm_support_libs

22.0 关于.ycm_extra_conf.py的修改
只需要修改flags标记,加入如下几项

'-isystem',                                                                                                                                   
#apt-get install libc++ or change this value to libstdc++                                                                                     
 '/usr/include/c++/4.4.7/',                                                                                                                    
 '-isystem',                                                                                                                                   
 '/usr/include',                                                                                                                               
 '-isystem',                                                                                                                                   
 '/usr/local/include',                                                                                                                         
 '-I',                                                                                                                                         
 '/home/×××/', 

这个文件的原型默认是在~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py


22.1 如果libstdc++的版本低于15就会出”在vim启动时SetUpPython“的问题,
可以通过在.bashrc中添加
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib64/"
来解决
因为更新版本的gcc会把新版本的 动态库 放到 /usr/local/lib64下面
通过命令
 "#strings /usr/local/lib64/libstdc++.so.6.0.19|grep GLIBCXX“可以来验证

22.2 打开.c .cpp .py文件直接卡死 Freeze

在vimrc中增加 let g:loaded_youcompleteme=1 就可以了

YCM的配置参考:http://www.cnblogs.com/zhongcq/p/3630047.html

22.3 通过运行:ycmDebugInfo发现The ycmd server SHUT DOWN
然后看提示的log, 会显示RuntimeError: Error importing ycm_core. Are you sure you have placed a version 3.2+ libclang.[so|dll|dylib] in folder "/home/×××/.vim/bundle/YouCompleteMe/         third_party/ycmd"? See the Installation Guide in the docs. Full error: libedit.so.2: cannot open shared object file: No such file or directory

解决办法:
用install.sh安装的libclang的版本,显示是下载的libclang 3.5, 但是会引起Crash。
这个没搜到什么靠谱的办法,预测自己的版本肯定是偏低,拷贝了一个别人自己编译的libclang.so(也是在相同的位置)放到自己的目录/.vim/bundle/YouCompleteMe/third_party/ycmd下面,就OK了

另外,我也重编了clang,估计上面替代一下就好了:


22.4 如果系统内的libclang 的版本是比较低的
貌似是 低于3.3,需要重新编译出更新的clang.so.
参考: /> 可以用Git下载,注意各个目录的位置。

22.5  修改timeout的值,有些编译很慢的文件会显示超时
.vim/bundle/YouCompleteMe/python/ycm/client/completion_request.py

22.6 开启debug
   let g:ycm_server_use_vim_stdout = 1
   let g:ycm_server_log_level = 'debug'
Then start gvim/macvim (not console vim) from the console. As you use Vim, you'll see the ycmd debug output stream in the console. Try to trigger semantic completion with this setup.


默认0.5 可以改成2
23. 配合YCM的两个插件
一个很好的配置参考:http://www.cnblogs.com/zhongcq/p/3642794.html
23.1 syntastic
一款支持多语言的实时语法检查插件。在 syntastic 的作用下,编码中、编译前,所有语法错误都将被抓出来并 呈现给你。

24. NERD Commenter注释插件
以C/C++文件为例,详析的使用方法,请:h NERDCommenter。在Normal或者Visual 模式下:


,ca,在可选的注释方式之间切换,比如C/C++ 的块注释/* */和行注释//
,cc,注释当前行
,c,切换注释/非注释状态
,cs,以”性感”的方式注释
,cA,在当前行尾添加注释符,并进入Insert模式
,cu,取消注释
Normal模式下,几乎所有命令前面都可以指定行数
Visual模式下执行命令,会对选中的特定区块进行注释/反注释


25. 关于高亮在会话中不灵的问题
需要把/usr/share/vim/vim73/colors/中的比如desert.vim 文件拷到自己的.vim目录下,然后修改为desert_my.vim,并且在此文件的
let g:colors_name="desert"
后面修改为如下的内容

"let g:colors_name="desert"
  let g:colors_name="desert_my"
  
  ">>>>>新加的部分,需要在g:colors_name的后面
  " 解决会话中无法高亮颜色的问题
  hi MarkWord1  ctermbg=Cyan     ctermfg=Black  guibg=#8CCBEA    guifg=Black
  hi MarkWord2  ctermbg=Green    ctermfg=Black  guibg=#A4E57E    guifg=Black
  hi MarkWord3  ctermbg=Yellow   ctermfg=Black  guibg=#FFDB72    guifg=Black
  hi MarkWord4  ctermbg=Red      ctermfg=Black  guibg=#FF7272    guifg=Black
  hi MarkWord5  ctermbg=Magenta  ctermfg=Black  guibg=#FFB3FF    guifg=Black
  hi MarkWord6  ctermbg=Blue     ctermfg=Black  guibg=#9999FF    guifg=Black 
  
  "书签高亮
  " For showmarks plugin
  hi ShowMarksHLl ctermbg=Yellow   ctermfg=Black  guibg=#FFDB72    guifg=Black
  hi ShowMarksHLu ctermbg=Magenta  ctermfg=Black  guibg=#FFB3FF    guifg=Black

然后再在.vimrc中指定一下colorscheme desert_my就可以了, source后进入vim文件可以用:colorscheme来验证一下


26. ultisnips的模式补全
ultisnips实际上并没有带各种Snippets,所以需要指定存放的地址。
vimrc里面的配置,另外如果输入:UltiSnipsEdit并没有出现对应的模板,而是all.snippets,这个是由于Your filetype plugin indent on must come after all Bundle directives.
所以要把BUndle的那些东西放在vimrc的最前面
具体参考 />

let g:UltiSnipsSnippetsDir = '~/.vim/bundle/vim-snippets/UltiSnips'
"插入模式下直接通过ii键来触发UltiSnips的代码块补全
let g:UltiSnipsExpandTrigger="ii"
""iI弹出UltiSnips的可用列表,不常用的, 所以这里设置成了特殊的iI映射
let g:UltiSnipsListSnippets="iI"
"II跳转的到下一个代码块可编辑区
let g:UltiSnipsJumpForwardTrigger="II"
""OO跳转到上一个代码块可编辑区
let g:UltiSnipsJumpBackwardTrigger="OO"

模板是在~/.vim/bundle/vim-snippets/UltiSnips/

里面的cpp的模板会extends c,继承c的,但是if和ife需要自己添加在c.snippets中。


27. Crl+Z是跳出vim回到console,可以按fg回到原来的编辑页面。 fg/bg是前台和后台的意思


28. 替代Fuzzy found和lookupfile的 CrlP
/> Basic Usage


Run :CtrlP or :CtrlP [starting-directory] to invoke CtrlP in find file mode.
Run :CtrlPBuffer or :CtrlPMRU to invoke CtrlP in find buffer or find MRU file mode.
Run :CtrlPMixed to search in Files, Buffers and MRU files at the same time.
Check :help ctrlp-commands and :help ctrlp-extensions for other commands.


Once CtrlP is open:


Press to purge the cache for the current directory to get new files, remove deleted files and apply new ignore options.
Press and to cycle between modes.
Press to switch to filename only search instead of full path.
Press to switch to regexp mode.
Use , or the arrow keys to navigate the result list.
Use or , to open the selected entry in a new tab or in a new split.
Use , to select the next/previous string in the prompt's history.
Use to create a new file and its parent directories.
Use to mark/unmark multiple files and to open them.
Run :help ctrlp-mappings or submit ? in CtrlP for more mapping help.


Submit two or more dots .. to go up the directory tree by one or multiple levels.
End the input string with a colon : followed by a command to execute it on the opening file(s):
Use :25 to jump to line 25.
Use :diffthis when opening multiple files to run :diffthis on the first 4 files.

阅读(2687) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~