Linux GVim插件配置-程序员宅基地

技术标签: fold  file  linux  文本编辑  vim  emacs  Linux GVim  

Vim编辑器被称为“编辑器之神“,是Linux系统中最常用的两个文本编辑器之一(另一个是被称为“神之编辑器”的Emacs)。GVim是图形化的Vim,很多版本的Linux都将GVim作为系统的一部分预装在客户端,但是最原始的GVim界面简单,功能都需要通过命令来实现,无形中提高了学习Vim的难度。

虽然Vim入门较难,但是能够一直作为Linux常用文本编辑器之一,主要取决于它的可定制性。除了通过修改配置文件.Vimrc开启或关闭Vim功能外,我们还可以找到很多插件(或者自己编写插件)来扩展Vim的功能。下面就列举一些常用的GVim插件。

1、Ctags

下载地址:http://ctags.sourceforge.net/

功能:扫描指定的源文件,找出其中所包含的语法元素,并将找到的相关内容记录下来。

安装:下载ctags-x.x.tar.gz并解压,进入解压后的文件夹运行./configure && make && make INSTALL。

使用:$ctags -R


2、taglist

下载地址:http://www.vim.org/scripts/script.php?script_id=273

功能:查看Vim编辑文件包含的函数列表,或是类包含的方法列表。

安装:

1)下载taglist;

2)解压后将plugin和doc文件夹中的文件分别拷贝至$HOME/.vim文件夹内对应的目录结构中。

3)重启GVim,输入:TlistToggle打开/关闭taglist窗口。

配置:添加以下代码到$HOME/.vimrc

""""""""""""""""""""""""""""""""""""""""""""""
"  Taglist
""""""""""""""""""""""""""""""""""""""""""""""

nmap <C-F5> <Esc>:!ctags -R *<CR>         " 使用ctrl+<F5>键运行Ctags
let Tlist_Auto_Open = 1                 " 启动vim自动打开taglist窗口
let Tlist_Use_Right_Window = 1          " 设置taglist窗口出现在右侧
let Tlist_File_Fold_Auto_Close = 1      " taglist只显示当前文件tag,其它文件的tag都被折叠起来
let Tlist_Exit_OnlyWindow = 1           " 如果taglist窗口是最后一个窗口退出vim
let Tlist_Sort_Type = "name"            " 设置taglist以tag名字进行排序
let Tlist_Use_SingleClick = 1           " 单击tag就跳转
let Tlist_Process_File_Always = 1       " 设置taglist始终解析文件中的tag,不管taglist窗口有没有打开
map <silent> <F7> :TlistToggle<cr>      " 使用<F7>键就打开/关闭taglist窗口
if has("gui_running")
    let Tlist_Inc_Winwidth = 0
else
    let Tlist_Inc_Winwidth = 1
endif


3、minibufexpl

下载地址:http://www.vim.org/scripts/script.php?script_id=159

安装:下载minibufexpl.vim到$HOME/.vim/plugin/文件夹。

功能:显示已打开的文件列表。

配置:添加以下代码到$HOME/.vimrc

""""""""""""""""""""""""""""""""""""""""""""""
" minibufexpl.vim
""""""""""""""""""""""""""""""""""""""""""""""

" ctrl+tab shift+ctrl+tab 切换缓冲区里的文件
let g:miniBufExplMapWindowNavVim = 1 
let g:miniBufExplMapWindowNavArrows = 1 
let g:miniBufExplMapCTabSwitchBufs = 1 
let g:miniBufExplModSelTarget = 1 

使用:CTRL+TAB在不同文件之间切换。


4、NERD tree

下载地址:http://www.vim.org/scripts/script.php?script_id=1658

功能:在Vim侧边增加窗口显示文件树形目录。

安装:下载nerdtree.zip文件,解压缩之后,把plugin/NERD_tree.vim 和doc/NERD_tree.txt分别拷贝到$HOME/.vim/plugin 和$HOME/.vim/doc 目录。

配置:添加以下代码到$HOME/.vimrc

""""""""""""""""""""""""""""""""""""""""""""""
" NERDTree
""""""""""""""""""""""""""""""""""""""""""""""
map <silent> <F6> :NERDTreeToggle<cr>      " 使用<F6>键就打开/关闭NERDTree窗口
let NERDTreeMinimalUI = 1                               " 关闭书签标签('Press ? for help')
let NERDTreeDirArrows = 1                               "  改变目录结点的显示方式(+/~)


5、代码补全

1)Autocomplpop

vim自带的代码补全功能在编辑代码时需要键入ctrl+n才能弹出智能提示菜单。而大多数IDE中,只要代码输入到相应的位置,补全提示就会自动的弹出来。因此需要给vim增加插件支持这些功能。Autocomplpop就是这样一个插件。

下载地址:http://www.vim.org/scripts/script.php?script_id=1879

功能:代码自动补全

安装:下载vim-autocomplpop.zip文件,解压缩之后,把相应的文件分别拷贝到$HOME/.vim/plugin 和$HOME/.vim/doc 目录。

2)OmniCppComplete

Autocomplpop的自动提示功能虽然可以实现提示但是对于C、C++开发者来说并不完善,例如不能自动补全类成员,因此需要OmniCppComplete配合使用。

下载地址:http://www.vim.org/scripts/script.php?script_id=1520

安装:下载vim-autocomplpop.zip文件,解压缩至$HOME/.vim/目录下。

配置:添加以下代码到$HOME/.vimrc

""""""""""""""""""""""""""""""""""""""""""""""
" OmniCppComplete配置
""""""""""""""""""""""""""""""""""""""""""""""
set nocp
filetype plugin on
map <F5> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>   "使用F5键生成OmniCppComplete使用的tag文件
set completeopt=menu
set cindent

:inoremap ( ()<ESC>i
:inoremap ) <c-r>=ClosePair(')')<CR>
:inoremap { {}<ESC>i
:inoremap } <c-r>=ClosePair('}')<CR>
:inoremap [ []<ESC>i
: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
endf


生成系统tags文件
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q -f ~/.vim/tags/systags /usr/include /usr/local/include

在vimrc末尾加入如下命令:

let OmniCpp_GlobalScopeSearch = 1 " 0 or 1
let OmniCpp_NamespaceSearch = 1 " 0 , 1 or 2
let OmniCpp_DisplayMode = 1
let OmniCpp_ShowScopeInAbbr = 0
let OmniCpp_ShowPrototypeInAbbr = 1
let OmniCpp_ShowAccess = 1
let OmniCpp_MayCompleteDot = 1
let OmniCpp_MayCompleteArrow = 1
let OmniCpp_MayCompleteScope = 1

set tags+=~/.vim/tags/systags
set tags+=tags

Autocomplpop和OmniCppComplete的使用前提是已经安装了Ctags,使用Ctags生成tag文件后才能正常使用这两个插件


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/furney/article/details/7465303

智能推荐

socket输入流中读取一个固定长度的字节_socket根据固定长度读取报文-程序员宅基地

文章浏览阅读8.7k次。前段时间项目中用到socket编程,我用socket输入流读取一个固定长度的字节经常会遇到各种各样的错误:后面读取内容的错位,或者直接后面的内容读取不到等问题。_socket根据固定长度读取报文

Qt中简单使用Firebase_uni firebase-程序员宅基地

文章浏览阅读3.1w次。上一篇对Firebase进行了简要的介绍。今天对Firebase进行简单的应用。在qt中,因为我不会Android和ios开发。代码出自github: https://github.com/clkasd/qt-firebaseapi最主要的就是写一个类,Firebase.直接代码: firebase.h#ifndef FIREBASE_H#define FIREBASE_H#include <_uni firebase

taro 与uni-app对比-程序员宅基地

文章浏览阅读1.3k次。https://www.jianshu.com/p/03e08399587e (copy)转载于:https://www.cnblogs.com/dianzan/p/10678689.html_nutui taroui 控件的差异

mysql大数据分库和分表 php解决方案!-程序员宅基地

文章浏览阅读109次。当Mysql数据量过大时,就会面临压力分解,这时分库分表是一个不错的解决方案,现在我们就来谈谈Mysql如何分库分表比较理想,然后再用php如何调用。1,主从复制,读写分离对主库修改数据,查询使用从库。一主多从,来降低数据库读取压力。2,分库分表根据实体业务来分库,分表。如,根据数据的活跃性,根据用户uid等。3,MySQL不同存储引擎区别InnoDB 用于数据完整性/写性能要求..._php+mysql大数据量进行数据库分表或分区的方法

视频教程-跟李宁老师学Python视频课程(17):Python 多线程-Python-程序员宅基地

文章浏览阅读189次。跟李宁老师学Python视频课程(17):Python 多线程 东北大学计算..._python线程视频

mysql 匿名函数调用_Go语言闭包(Closure)——引用了外部变量的匿名函数-程序员宅基地

文章浏览阅读67次。Go语言中闭包是引用了自由变量的函数,被引用的自由变量和函数一同存在,即使已经离开了自由变量的环境也不会被释放或者删除,在闭包中可以继续使用这个自由变量,因此,简单的说:函数 + 引用环境 = 闭包同一个函数与不同引用环境组合,可以形成不同的实例,如下图所示。图:闭包与函数引用一个函数类型就像结构体一样,可以被实例化,函数本身不存储任何信息,只有与引用环境结合后形成的闭包才具有“记忆性”,函数是编...

随便推点

List排序(匿名方法)_list.sort是升序还是降序-程序员宅基地

文章浏览阅读1k次。在开发过程中,遇到过的小问题_list.sort是升序还是降序

在VMware虚拟机上安装黑苹果(详细教程)_虚拟机安装苹果系统-程序员宅基地

文章浏览阅读6.1k次,点赞3次,收藏20次。如果是还没有安装虚拟机的请先安装虚拟机虚拟机17.0.0以下是虚拟机的 许可证 任何一个都可以。_虚拟机安装苹果系统

2019 ICPC南京 H. Prince and Princess-程序员宅基地

文章浏览阅读709次。2019 ICPC南京 H. Prince and Princess题意:王子询问房间找公主。题解:一直没有读到那句话,还是很粗心了。当a=1,b=c=0的时候就是0,因为询问的人包括公主,如果只有一个说真话的人那就一定是公主,所以输出0就好了。(The opposition, like the queen, will always provide an incorrect answer. O..._h. prince and princess

LWIP使用经验---变态级(好文章)-程序员宅基地

文章浏览阅读2.3k次,点赞4次,收藏67次。LWIP使用经验 一 LWIP内存管理 数据包管理设置内存大小宏编译开关 二 LWIP启动时序三 LWIP运行逻辑 接收数据包SequentialAPI函数调用 四 TCPIP核心知识点 滑动窗口三次握手断开连接TCP状态转换同时打开同时关闭 五正确使用LWIP六 LWIP常见问题 网卡驱动程序内存泄露PC机无法与LWIP建立TCP连接 ..._lwip使用

响应式图像Lightbox插件baguetteBox.js,纯JS开发-程序员宅基地

文章浏览阅读449次。baguetteBox.js 是一个简单和易于使用的响应式的图像 Lightbox 插件,支持滑动手势在移动设备上使用。纯 JavaScript 实现,不依赖第三方库和插件,赶紧来体验吧。好了,看下本文重点内容。baguetteBox.jsbaguetteBox.js 是一个简单和易于使用lightbox纯JavaScript脚本,拥有图像放大缩小并带有相应的CSS3过度,并能在触摸屏等设备上完美..._baguettebox.js

sqoop导入数据进hive中遇到问题的解决办法_sqoop no column by the name updatedatefound while -程序员宅基地

文章浏览阅读672次。因为我是在导入成功后才写的文章,所以问题就不一一赘述了,直接解决方案。我原版本信息:hive-2.3.6 hadooop2.7 sqoop-1.4.7在网上找了很多方法,没有解决问题,没有导入数据成功,我就换了下hive版本现版本信息: hive-1.2.1 hadooop2.7 sqoop-1.4.7解决办法(依次执行):1.[root@hadoop01 ~]# cp /usr/local/hive1.2.1/lib/hive-common-1.2.1.jar /usr/_sqoop no column by the name updatedatefound while importing data; expecting

推荐文章

热门文章

相关标签