分类目录归档:vim

cscope和ctags添加头文件的索引,查看系统库函数【轉】

【原文鏈接】

http://blog.csdn.net/qq_21544879/article/details/51957133

【部分原文】

写C语言代码的时候,有时候希望能查看系统库函数,比如memcpy是怎么实现的。
解决方法:

sudo vi /etc/bash.bashrc   

写入:

alias mkcscopefile='find `pwd` -name "*.[ch]" -o -name "*.cpp" > cscope.files'  
alias mktag='ctags -R;cscope -bRq'    

保存退出
运行:source /etc/bash.bashrc
接下来,利用 mkcscopefile 和mktag就可以生成索引文件了
我们进入c语言的头文件目录生成索引,在项目中加入索引就可以了在我们的代码中跳转到系统库函数了。

cd /usr/include
mkcscopefile && mktag
//生成索引文件

用vim打开我们自己的项目,如果需要查看库函数时,在命令模式输入cs add /usr/include 就可以了。
加入库函数索引前:
这里写图片描述

加入库函数
这里写图片描述

定位到printf, 按下ctrl+], 返回可以按ctrl+t
成功跳转到库函数
这里写图片描述

这里写图片描述

Vim无插件实现Markdown文件实时预览【轉】

【原文鏈接】

http://blog.csdn.net/demorngel/article/details/72631234

【原文內容】

之前的文章Vim插件之vim-instant-markdown曾提到Vim实时预览Markdown文件的方法,不过这个方法有个小缺点,就是依赖不是很好处理–Node.jsnpm在很多发行版(系统)并没有默认安装,有的发行版(系统)上甚至没有这个包,因此下面介绍一种Vim不需要任何插件就能实时预览Markdown文件的方法,而且它还是跨平台的。
首先,需要安装Firefox,Windows用户在安装完Firefox以后还需要将它添加到环境变量中,如下图
这里写图片描述

之后继续安装Markdown ViewerAuto Reload这两个插件并重启Firefox,这里没有选用Chrome是因为Chrome上预览Markdown的插件都存在一个问题–不能正确的显示表格,内容都连在一起了,最后在vimrc中写入

"按<F4>使用Firefox预览文件
nmap <F4> :call Preview()<CR>
func! Preview()
    if &filetype == 'markdown' || $filetype == 'md'
        exec "!firefox %"
    endif
endfunc

这样,当你在Vim中打开Markdown文件并按一次以后就会自动打开Firefox预览窗口,每次保存文件时,Firefox就会自动更新预览页面的内容。

vim以16进制打开和编辑文件【轉】

【原文鏈接】

【Linux】vim以16进制打开和编辑文件

【原文內容】

先用vim以二进制格式打开需要编辑或查看的文件,不采用-b参数有时会导致转换错误,详见分隔线后部分。

vim -b file-to-open.dat

然后用xxd把文件转换成十六进制格式

:%!xxd

转化后显示类似如下

现在就可以对待普通文本一样查看和编辑二进制文件了。

修改十六进制内容是不会导致右侧字符改变;其实右侧的文本只是给你参考的,修改了再将十六进制转换回二进制,这些修改都会忽略。

修改完成使用xxd把十六进制转换回二进制:

:%!xxd -r

只有十六进制的修改会生效。

Stack Overflow:帮助百万开发者退出Vim编辑器【轉】

原文:Stack Overflow: Helping One Million Developers Exit Vim
作者:David Robinson
翻译:黑色巧克力

译者注:文章围绕“如何退出Vim编辑器”这个问题的数据,对哪些国家和哪些程序员容易陷入退出Vim的困境进行分析。

最近,一个流行的Stack Overflow问题浏览数达到了重要的里程碑。


image
jclancy,你并不孤单,这个问题提出后的5年时间里,有超过100万的开发者被困在了Vim中,没有一点帮助就无法退出。实际上,很难退出Vim编辑器是开发人员的一个常见笑话。


image

image
有经验的Vim用户告诉我,这种名声是不公平的,而且我确信他们是对的(即使我在过去的几年里已经掌握了退出的窍门)。我认为有两个原因导致很容易忘记如何退出Vim:其一是开发人员经常从git命令或其他意外的情况下进入Vim,其二是他们很少遇到这种情况,以至于忘记了上一次是如何解决的。

为了纪念这个重要的里程碑,我们决定看看围绕这个问题的数据。我们还将尝试推测出谁最有可能在Vim中被卡住,并检查数据占比是如何随着国家和编程语言而变化的。

有多少人一直在努力退出Vim?

在过去的一年里,如何退出Vim编辑器已经达到了0.005%的问题流量,也就是说,每20000次访问Stack Overflow的问题中就有一个是关于如何退出Vim。这意味着,在工作日的高峰时段,每小时大约有80人需要帮助摆脱Vim。

那么随着时间的推移,它所构成的流量的百分比变化了吗?或者说,开发人员已经开始学习如何独立地退出Vim了吗?


image
结果看起来不像。这个问题是在2012年8月提出的,几个月后,它的流量就很少了,然后在接下来的两年里开始增长,大概是因为网上有了更多链接源,并且它已经转移到了搜索引擎结果的顶端。而在过去的两年里,这种情况一直比较稳定,这并不一定意味着相同的人一次又一次地访问它,而可能表示新的程序员第一次在Vim中总被困住。

不同国家的不同占比

正如之前的博客文章中所看到的,可以使用Stack Overflow流量分析来了解开发人员的地理分布。

让我们看一下这个问题在每个国家的访问中所占百分比。在拥有大量有经验的Vim用户的国家,预计这个百分比将会很低。当它高的时候,它表明许多用户在没有必要的时候被困在了Vim中。


image
看起来,乌克兰、土耳其和印尼的开发人员在Vim问题上陷入了困境:在他们的Vim问题中,这一比例比其他任何国家都要高。相比之下,在中国、韩国和日本,这个问题的比例只有十分之一,这可能表明,当这些国家的开发人员进入Vim时,他们通常是有意这么做的,并且他们知道如何摆脱这种情况。

什么样的程序员会被困在Vim中?

另外,不同编程语言的用户也可能有不同的Vim体验。我们可以通过对每个用户的主要编程技术的“退出Vim/总Vim”百分比来进行调查。

我们将根据他们经常访问Stack Overflow的标签来定义这个问题(例如,我访问过的最多的标签是R:它占了我的问题视图的52%)。这不是一个完美的衡量标准,但它对语言的分类足够可靠(对于这个分析,我们只考虑至少有100次访问该站点的注册用户)。


image
最有可能被困在Vim中的开发人员是前端Web开发人员:那些主要访问像JQuery、CSS和AngularJS这样标签的开发人员。紧随其后的是微软开发者(csql Server)和移动端(Android和iOS)开发人员。这些开发人员通常使用IDE(Visual Studio、Eclipse、Xcode等),而不是普通的文本编辑器,因此他们更容易在Vim中“卡住”。

最不可能被困在Vim中的是那些用C、C++、Python和Ruby编程的人。这些语言对我来说是有意义的:它们是低级语言和脚本语言的组合,通常与纯文本编辑器而不是IDE一起使用,因此开发人员有经验可以在不使用Google搜索的情况下退出Vim。

总结

当我看到这个问题接近一百万次访问时,我感到很高兴,这个网站帮助了很多开发人员,我为自己的工作、为网站做出贡献而感到自豪。你永远不知道,你的答案可以在某些时候帮助数百万人,不管是回答如何撤销git提交,还是回答Python中的yield关键字是如何工作的。

将Vim改造为强大的IDE—Vim集成Ctags/Taglist/Cscope/Winmanager/NERDTree/OmniCppComplete(有图有真相) 【轉】

工欲善其事,必先利其器。一个强大的开发环境可以大大提高工作效率。好吧,我知道这是废话。。。不过,我想一定有很多跟我一样打算进入Linux平台开发 的新手,一开始都为找不到一个像Windows下的VS那样可以一键安装并且功能几乎完美无缺的开发工具而郁闷不已,甚至打算收回刚刚迈出的脚步。所幸的 是,通过几天努力,我总算配置出了一个功能完备的基于Vim的开发环境。这个开发环境除了基本的Vim外,还包括Ctags,Taglist,Cscope,SuperTab,OmniCppComplete,Winmanager,NERDTree和 MiniBufExplorer等组件。

在开始操作前,先普及下基础概念,然后约定一下表达规范。
1)Vim存在多个配置文件vimrc,比如/etc/vimrc,此文件影响整个系统的Vim。还有~/.vimrc,此文件只影响本用户的Vim。而且~/.vimrc文件中的配置会覆盖/etc/vimrc中的配置。这里我们只修改~/.vimrc文件。
2)Vim的插件(plugin)安装在Vim的runtimepath目录下,你可以在Vim命令行下运行”set rtp“命令查看。这里我们选择安装在~/.vim目录,没有就创建一个。
3)当本文说”在Vim命令行下运行cmdxx命令“时,意思是指在Vim的命令行模式下运行cmdxx命令,即在Vim的正常模式下通过输入冒号”:”进入命令行模式,然后紧接着输入命令cmdxx。在后文描述中都会省略冒号”:”输入。
4)如果没有说明“在Vim命令行下运行某命令”,则是在shell中执行该命令。
5)如果命令中间被空白符间隔或有与正文容易混淆的字符,我会用双引号将命令与正文区分。所以读者在实际操作时,不要输入命令最前面和最后面引号。
6)本文关于组合快捷键的描述,形如a-b形式的快捷键表示同时按下a键和b键,而形如”a-b c”形式的快捷键,则表示先同时按下a键和b键,然后放开ab键,再按下c键。

 
1,安装使用Ctags
Ctags工具是用来遍历源代码文件生成tags文件,这些tags文件能被编辑器或其它工具用来快速查找定位源代码中的符号(tag/symbol), 如变量名,函数名等。比如,tags文件就是Taglist和OmniCppComplete工作的基础。这里介绍从源代码包安装,安装步骤跟大多数软件的从源代码安装步骤一样。

1)从http://ctags.sourceforge.net/下载源代码包后,解压缩生成源代码目录
2)然后进入源代码根目录执行./configure
3)然后执行make
4)编译成功后执行make install
5)在~/.vimrc中增加以下这行:
map <C-F12> :!ctags -R –c++-kinds=+p –fields=+iaS –extra=+q .<CR>

到此,Ctags已安装成功。使用Ctags的也很简单。 进入我们的项目代码根目录,执行以下命令:

ctags -R –c++-kinds=+p –fields=+iaS –extra=+q

另外,由于在前面第5条,我们已经在Vim中配置了Ctrl-F12组合快捷键,所以我们也可以进入代码根目录后,打开Vim,按下Ctrl-F12快捷键自动生成tags文件。命令执行完后,会在源代码目录生成tags文件。Vim默认会自动读取当前目录下的tags文件,所以不需要修改~/.vimrc文件。此时,我们已经具有定义跳转的功能了。有两组快捷键是最常用的。

Ctrl-]    跳转到光标所在符号的定义。
Ctrl-t    回到上次跳转前的位置。
更多功能通过命令man ctags或在Vim命令行下运行help ctags查询。

 
2,安装使用Taglist
Taglist是vim的一个插件,提供源代码符号的结构化视图。
2)进入~/.vim目录,将Taglist安装包解压,解压后会在~/.vim目录中生成几个新子目录,如plugin和doc(安装其它插件时,可能还会新建autoload等其它目录)。
3)进入~/.vim/doc目录,在Vim下运行”helptags .”命令。此步骤是将doc下的帮助文档加入到Vim的帮助主题中,这样我们就可以通过在Vim中运行“help taglist.txt”查看taglist帮助。
4)打开配置文件~/.vimrc,加入以下两行:

let Tlist_Show_One_File=1
let Tlist_Exit_OnlyWindow=1
到此安装已经完成。在Vim命令行下运行TlistToggle命令就可以打开Taglist窗口,再次运行TlistToggle则关闭。示图如下:
我们可以通过Ctrl-w快捷键或鼠标点击在Taglist窗口和编辑区之间切换焦点,在Taglist窗口用鼠标或键盘选择某个符号,然后点击或回车,就可以跳转到该符号定义的位置。更多功能可通过在Vim命令行下运行help taglist.txt查询。
3,安装使用Cscope
Cscope提供交互式查询语言符号功能,如查询哪些地方使用某个变量或调用某个函数。Cscope已经是Vim的标准特性,默认都有支持,官方网址为http://cscope.sourceforge.net/
1)在Vim下运行version查看Vim支持哪些特性,前面有前缀符号+的为支持。如果支持Cscope,则直接进入2),否则下载Cscope源代码包编译安装。步骤同Ctags安装。
2)确定Vim已支持Cscope后,将文件http://cscope.sourceforge.net/cscope_maps.vim下载到~/.vim/plugin目录。到这里,我们就可以开始使用Cscope了。
1)使用Cscope需要生成cscope数据库文件。进入项目代码根目录运行命令:
cscope -Rbq -f path/xxx.out
命令运行后会生成xxx.out文件,即cscope数据库文件。更多用法参考man cscope文档。
2)进入项目代码根目录,在Vim下运行命令:
cs add path/xxx.out
此命令将cscope数据库载入Vim。
3)Cscope常用快捷键Ctrl-\ s 查找所有当前光标所在符号出现过位置。Ctrl-\ c 查找所有调用当前光标所在函数的函数。按下快捷键查找结束后会在编辑区下方出现查找结果的列表,输入结果编号并回车,就能跳转到该查找结果在源代码中的相应位置。例如,我们将光标移到 initial_pool_size变量定义的位置,即17行,然后按下”Ctrl-\ s”组合快捷键,得到示图如下:
然后我们输入2,并回车,就能跳转到第2个查找结果。为了界面更好看,可以把Cscope的查找结果输出到quickfix窗口,需要在~/.vimrc中加入下面这行:
set cscopequickfix=s-,c-,d-,i-,t-,e-
这样,通过快捷键查找某个符号后,会立即跳转到第一个找到的该符号出现的位置。如果你对这次默认跳转的位置不满意,在Vim命令行下运行cw命令,就能在 编辑区下面quickfix窗口看到所有查找结果的列表,点击相应列表项就能跳转到相应位置。这个功能已经跟VS很接近了吧:)
更多功能可通过命令man cscope或在Vim命令行下运行help cscope查询。
 
4,安装使用OmniCppComplete
OmniCppComplete主要提供输入时实时提供类或结构体的属性或方法的提示和补全。跟Talist一样,OmniCppComplete也是一个Vim插件,同样依赖与Ctags工具生成的tags文件。安装步骤跟Taglist类似。从http://www.vim.org/scripts/script.php?script_id=1520下载安装包后。
1)进入~/.vim目录,将安装版解压缩
2)进入~/.vim/doc目录,在Vim命令行下运行”helptags .”
3)在~/.vimrc中加入以下几行:
set nocp
filetype plugin on
OmniCppComplete的使用几乎跟VS下的VA一样。如下图所示,输入m0.之后立即弹出my_class类中所有的函数列表,然后用上下键选择合适的函数。 
更多功能通过在Vim命令行下运行”help omnicppcomplete”查询。
5,安装使用SuperTab
SuperTab使Tab快捷键具有更快捷的上下文提示功能。跟OmniCppComplete一样,SuperTab也是一个Vim插件。从http://www.vim.org/scripts/script.php?script_id=1643下载安装版。这个安装包跟先前的几个Vim插件不同,它是一个vba文件,即Vimball格式的安装包,这种格式安装包提供傻瓜式的安装插件的方法。
1)用Vim打开.vba安装包文件。
2)在Vim命令行下运行命令“UseVimball ~/.vim”。此命令将安装包解压缩到~/.vim目录。VImball安装方式的便利之处在于你可以在任何目录打开.vba包安装,而不用切换到安装 目的地目录。而且不用运行helptags命令安装帮助文档。
3)在~/.vimrc文件中加入以下这行:
let g:SuperTabDefaultCompletionType=”context”
SuperTab使用很简单,只要在输入变量名或路径名等符号中途按Tab键,就能得到以前输入过的符号列表,并通过Tab键循环选择。 
 
6,安装使用Winmanager,NERDTree和MiniBufExplorer
前面介绍的几个工具和插件,主要提供快捷的编辑功能,如定义跳转,符号查询,符号提示与补全等。这里的三个插件,主要优化布置VIm的界面。具体来 说,NERDTree提供树形浏览文件系统的界面,MiniBufExplorer提供多文件同时编辑功能,而Winmanager将这NERDTree 界面和Taglist界面整合起来,使Vim更像VS!分别从http://www.vim.org/scripts/script.php?script_id=1658http://www.vim.org/scripts/script.php?script_id=159http://www.vim.org/scripts/script.php?script_id=95下载NERDTree,MiniBufExplorer和Winmanager安装包(Winmanager还有个更新的vba版本http://www.vim.org/scripts/script.php?script_id=1440,这里选用旧版本的Winmanger)。
1)像其它插件一样,将NERDTree安装包解压到~/.vim目录。并进入doc目录,在Vim命令行下运行”helptags .”命令。
2)MiniBufExplorer只有一个.vim文件,将其拷贝到~/.vim/plugin目录。
3)在~/.vimrc文件中加入以下几行:
let g:miniBufExplMapWindowNavVim = 1
let g:miniBufExplMapWindowNavArrows = 1
let g:miniBufExplMapCTabSwitchBufs = 1
let g:miniBufExplModSelTarget = 1
let g:miniBufExplMoreThanOne=0

4)将Winmanager安装包解压到~/.vim目录。

5)在~/.vimrc文件中加入以下几行:

let g:NERDTree_title=”[NERDTree]”
let g:winManagerWindowLayout=”NERDTree|TagList”
function! NERDTree_Start()
    exec ‘NERDTree’
endfunction
function! NERDTree_IsValid()
    return 1
endfunction
nmap wm :WMToggle<CR>

6)这个版本的Winmanager好像有个小bug,你在打开Winmanager界面时,会同时打开一个空的文件。这会影响后续使用,所以我们要在打 开Winmanager时关掉这个空文件。在~/.vim/plugin目录下的winmanager.vim文件中找到以下函数定义并在第5行下添加第 6行的内容:

function! <SID>ToggleWindowsManager()
   if IsWinManagerVisible()
      call s:CloseWindowsManager()
   else
      call s:StartWindowsManager()
      exe ‘q’
   end
endfunction
到这里,就大功告成了!现在进入我们的项目目录,打开Vim,按下组合快捷键w-m就可以我们的崭新的Vim了!再次按下w-m就可关闭界面。示图如下:
界面最上面的一条窄边就是MiniBufExplorer,可以看到我打开了两个文件cache.c和assoc.c,是不是很像VS的标签?紧靠MiniBufExplorer下方左边的矩形区域就是NERDTree。在这个窗口,我们可以用鼠标或键盘方便的浏览整个文件系统,在某个文件上点击或回车,就可以在右边编辑区域打开该文件。NERDTree下方的就是前面安装的Taglist界面。
7,其它有用的~/.vimrc设置
设置配色方案,我用的是eveing方案,配色方案保存在/usr/share/vim/vimXY/colors
colo evening
显示行数
set nu
与自动缩进相关的选项
set autoindent
set tabstop=4
set shiftwidth=4
set mouse=a