技术标签: 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文件后才能正常使用这两个插件。
文章浏览阅读8.7k次。前段时间项目中用到socket编程,我用socket输入流读取一个固定长度的字节经常会遇到各种各样的错误:后面读取内容的错位,或者直接后面的内容读取不到等问题。_socket根据固定长度读取报文
文章浏览阅读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
文章浏览阅读1.3k次。https://www.jianshu.com/p/03e08399587e (copy)转载于:https://www.cnblogs.com/dianzan/p/10678689.html_nutui taroui 控件的差异
文章浏览阅读109次。当Mysql数据量过大时,就会面临压力分解,这时分库分表是一个不错的解决方案,现在我们就来谈谈Mysql如何分库分表比较理想,然后再用php如何调用。1,主从复制,读写分离对主库修改数据,查询使用从库。一主多从,来降低数据库读取压力。2,分库分表根据实体业务来分库,分表。如,根据数据的活跃性,根据用户uid等。3,MySQL不同存储引擎区别InnoDB 用于数据完整性/写性能要求..._php+mysql大数据量进行数据库分表或分区的方法
文章浏览阅读189次。跟李宁老师学Python视频课程(17):Python 多线程 东北大学计算..._python线程视频
文章浏览阅读67次。Go语言中闭包是引用了自由变量的函数,被引用的自由变量和函数一同存在,即使已经离开了自由变量的环境也不会被释放或者删除,在闭包中可以继续使用这个自由变量,因此,简单的说:函数 + 引用环境 = 闭包同一个函数与不同引用环境组合,可以形成不同的实例,如下图所示。图:闭包与函数引用一个函数类型就像结构体一样,可以被实例化,函数本身不存储任何信息,只有与引用环境结合后形成的闭包才具有“记忆性”,函数是编...
文章浏览阅读1k次。在开发过程中,遇到过的小问题_list.sort是升序还是降序
文章浏览阅读6.1k次,点赞3次,收藏20次。如果是还没有安装虚拟机的请先安装虚拟机虚拟机17.0.0以下是虚拟机的 许可证 任何一个都可以。_虚拟机安装苹果系统
文章浏览阅读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
文章浏览阅读2.3k次,点赞4次,收藏67次。LWIP使用经验 一 LWIP内存管理 数据包管理设置内存大小宏编译开关 二 LWIP启动时序三 LWIP运行逻辑 接收数据包SequentialAPI函数调用 四 TCPIP核心知识点 滑动窗口三次握手断开连接TCP状态转换同时打开同时关闭 五正确使用LWIP六 LWIP常见问题 网卡驱动程序内存泄露PC机无法与LWIP建立TCP连接 ..._lwip使用
文章浏览阅读449次。baguetteBox.js 是一个简单和易于使用的响应式的图像 Lightbox 插件,支持滑动手势在移动设备上使用。纯 JavaScript 实现,不依赖第三方库和插件,赶紧来体验吧。好了,看下本文重点内容。baguetteBox.jsbaguetteBox.js 是一个简单和易于使用lightbox纯JavaScript脚本,拥有图像放大缩小并带有相应的CSS3过度,并能在触摸屏等设备上完美..._baguettebox.js
文章浏览阅读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