标签 Vim 下的文章

如果你稍微写过一点代码,就能知道“集成开发环境”(IDE)是多么的便利。不管是Java、C还是Python,当IDE会帮你检查语法、后台编译,或者自动导入你需要的库时,写代码就变得容易许多。另外,如果你工作在Linux上,你也会知道Vim在进行文本编辑的时候是多么的方便。所以,你可能会想从Vim中也获取这些IDE特性。

事实上,很少有方法可以帮你做到。有些人可能会想到试着把Vim打造成C语言IDE的,比如c.vim;也有把Vim集成到Eclipse里的 Eclim 。但是我想要告诉你的是一个更加通用的,只用插件实现的方案。你肯定不想因为安装了太多的面板和特性而让你的编辑器变得臃肿不堪。只用插件实现的方案可以让你只选择那些你想要集成到Vim的特性。这样做的额外的一个好处是,这个IDE不是专门针对某一种语言的,可以让你写任何类型的代码。下面就来看一下我的 把IDE特性带进Vim的前10款插件 吧。

先来个福利: Pathogen

首先,可能不是所有人都熟悉Vim的插件,并知道该怎么安装这些插件。所以,我推荐的第一个插件就是Pathogen,因为这个插件会让你更容易安装其他插件。如果你要安装另外的没有在这里列出来的插件,用Pathogen会变得非常简单。它的官方页面的文档写的非常好,去下载安装一个吧。接下来插件的安装也会变得容易很多。

1. SuperTab

我们习惯于IDE的第一个原因就是它的自动补全功能。所以,我喜欢这个非常方便的,给了Tab键“超能力”的 SuperTab 插件。

2. Syntastic

如果你需要使用一种以上的语言进行编程,有时候是非常容易混淆不同语言之间的语法的。幸运的是,syntastic 会帮你检查,然后告诉你是否应该加上圆括号或者方括号,或者告诉你在某个地方,你忘了一个分号。

3. Auto Pairs

另外一件让程序员们抓狂的事是:我是不是少加了最后一个括号?!每个人都讨厌用手指去数那些隔的非常远的括号。为了处理这个问题,我用 Auto Pairs 插件,这个插件会自动插入和格式化方括号和圆括号。

4. NERD Commenter

如果你在找一个可以支持多种程序语言的注释代码的快捷键,你可以试试 NERD Commenter。即使你不是程序员,我也非常非常推荐这款插件,因为它会让你在注释bash脚本或者其他任何东西的时候都会变得非常高效。

5. Snipmate

任何一个程序员都知道,好的码农写代码,杰出的码神重用代码。snipmate可以容易的插入代码片段到你的文件里面,大大的减少了你敲键盘的次数。它默认的包含了很多各种语言的代码片段,你也可以非常容易的添加你自己的。

6. NERDTree

管理一个大的项目时,把代码分散到不同的文件里面是非常好的主意。也是一个基本的编码原则。NERDTree 是一个不错的可以直接在Vim里使用的文件浏览器,它可以让你随时想到所有的文件。

7. MiniBufferExplorer

为了打造一个文件浏览器,支持同时打开多个文件,没有什么比一个好的缓冲区管理器更重要了。MiniBufferExplorer 就可以非常漂亮和高效地完成这个工作。它甚至为你的缓冲区设置了不同的颜色和切换快捷键。

8. Tag List

当你同时有多个文件打开时,很容易忘了你都在这些文件里添加了什么。为了防止你忘记,Tag List 这个代码查看器将会用一种漂亮简洁的格式展示其中的的变量和函数。

9. undotree

对于我们之中那些喜欢undo,redo然后又undo某些更改,然后依据这些来查看整个编辑完成过程的人来说, undotree 是一个不错插件,可以以一棵树的形式看到你的undo和redo历史。这个功能跟代码完全没有关系,所以这是我非常喜欢的一个插件。

10. gdbmgr

最后,但并非不重要,每个人都在某个时刻需要一个调试器。如果你喜欢gdb,那么gbdmgr就是为你准备的,因为它集成了那个著名的调试器到Vim中。

总结一下,不管你是不是一个疯狂的coder,能有一些额外的Vim功能在手总是非常方便的。像我在简介里说到的,如果你不需要,你不用安装这里所有的这些插件。或者你想要安装另外的也行,这些其实只是一个基础入门级的插件。

你在用Vim的什么插件?或者你想完善这个前10列表么?请在评论里告诉我们吧。


via: http://xmodulo.com/2014/06/turn-vim-full-fledged-ide.html

译者:love\_daisy\_love 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

Vim (Vi IMproved)是一款在程序员之间非常受欢迎的文本编辑器。它在执行不同的快捷命令操作上有它自己的特长。

从Vim访问剪切板

比如,要拷贝高亮的文本,我们使用‘y’命令,并用‘x’来剪切。但是,vim(不是gVim)剪切板的内容默认情况下是不能被其他的vim实例访问的。

Vim版本信息中使用‘+’表示启用了系统剪切板。你可以运行‘vim ­­–version’,如果你看不到像“+xterm\_clipboard”而是显示“­xterm\_clipboard“,那么会使用内部剪切板,其将不能被其它的vim实例访问。

安装gvim和parcellite

为了访问vim剪切板的内容,你需要安装gvim包。gVim是vim编辑器的GUI模式,它的剪切板选项默认启用。

# yum install -y gvim

然后,使用RPMForge 仓库安装parcellite 包。Parcellite是一款轻量级,小巧而免费的Linux剪切板管理工具。

# yum install -y parcellite

一旦安装后,运行下面的命令。这里的参数‘&’是使parcellite以后台进程运行。

# parcellite &

检查选项已经在gvim中启用。

# gvim --version

确保“+xterm\_clipboard”选项显示在下面的输出中。

VIM - Vi IMproved 7.2 (2008 Aug 9, compiled Apr  5 2012 10:12:08)
Included patches: 1-411
Modified by <[email protected]>
Compiled by <[email protected]>
Huge version with GTK2 GUI.  Features included (+) or not (-):
+arabic +autocmd +balloon_eval +browse ++builtin_terms +byte_offset +cindent 
+clientserver +clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments 
+cryptv +cscope +cursorshape +dialog_con_gui +diff +digraphs +dnd -ebcdic 
+emacs_tags +eval +ex_extra +extra_search +farsi +file_in_path +find_in_path 
+float +folding -footer +fork() +gettext -hangul_input +iconv +insert_expand 
+jumplist +keymap +langmap +libcall +linebreak +lispindent +listcmds +localmap 
+menu +mksession +modify_fname +mouse +mouseshape +mouse_dec +mouse_gpm 
-mouse_jsbterm +mouse_netterm -mouse_sysmouse +mouse_xterm +multi_byte 
+multi_lang -mzscheme +netbeans_intg -osfiletype +path_extra +perl +postscript 
+printer +profile +python +quickfix +reltime +rightleft -ruby +scrollbind 
+signs +smartindent -sniff +startuptime +statusline -sun_workshop +syntax 
+tag_binary +tag_old_static -tag_any_white -tcl +terminfo +termresponse 
+textobjects +title +toolbar +user_commands +vertsplit +virtualedit +visual 
+visualextra +viminfo +vreplace +wildignore +wildmenu +windows +writebackup 
+X11 -xfontset +xim +xsmp_interact +xterm_clipboard -xterm_save

打开用户的.bashrc文件。

# vim ~/.bashrc

加入别名并保存文件(按下‘i’来插入行并按下ESC,接着运行:wq来保存并退出)。

# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias vim='gvim -v'
# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

这个alias是内置的用于将一些命令绕到其他命令上。这样每次当vim命令运行时,相应的别名会启动默认带剪切板的gVim。

现在,用类似的方式编辑你的‘.vimrc’文件(以防你没有 .vimrc文件,生成这样一个文件然后再回来)。

# vim ~/.vimrc

追加下面这行并保存文件。

autocmd VimLeave * call system("echo -n $'" . escape(getreg(), "'") . "' | xsel -ib")

现在在vim中打开任何文件并高亮部分文本(使用'v'命令)并按下'y'。尝试在vim外面的任何地方粘帖(关不关vim都行),你就发现vim里面复制的内容被粘帖出来了。

附:生成 .vimrc 文件

运行下面的命令来生成.vimrc文件(如果你已做了就跳过这部分)。

# cd   [返回到你的主目录]       
# vim .vimrc

在vim中在按下ESC键后运行下面的命令(在vim中,每个命令是在按下ESC键后也就是带你进入命令模式后运行的)。

:r $VIMRUNTIME/vimrc_example.vim 
:w

via: http://www.tecmint.com/accessing-clipboard-contents-across-multiple-instances-of-vim-from-terminal/

译者:geekpi 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

在“大数据”时代,我们会经常遇到有大文本文件(上 GB 或更大)的情况。假设需要我们手工的搜索和编辑这些大文件,或者为了解决一些特定的问题而需要手工分析多个上 GB 的日志文件。传统的文本编辑软件对处理这样的大文件不太有效,当我们试图打开一个大文件时会经常由于内存不足而郁闷的不行。

如果你是一个精明的系统管理员,你也许会用 cat、tail、grep、sed、awk 等这些命令的组合来打开和编辑一个文本文件。在这篇教程里,我将会谈论关于如何在 Linux 中打开(并编辑)一个大文本文件的更友好的方式方法。

Vim 的 LargeFile 插件

Vim文本编辑器拥有大量的插件(或脚本),它们能扩展 VIM 的功能。其中的一个Vim插件是 LargeFile 插件

LargeFile 插件可以使大文件更迅速的被加载和编辑,它是通过关闭 VIM 的一些像事件、回退、语法高亮等功能来实现的。

要在 VIM 上安装 LargeFile 插件,首先要确认是否已经安装 VIM。

在 Debian、 Ubuntu 或 Linux Mint 系统中:

$ sudo apt-get install vim 

在 Fedora、CentOS 或 RHEL 系统中:

$ sudo yum install vim-enhanced 

可以从 Vim website 上下载 LargFile 插件,最新版本号是5,下载的文件将会保存为 Vimball 格式(以 .vba 结尾)。

要在你的 home 目录下安装插件,用 VIM 打开 .vba 文件,如下所示。

$ gunzip LargeFile.vba.gz
$ vim LargeFile.vba 

在 VIM 窗体上输入 “:so %”,然后按回车键,就可以在你的 home 目录下安装这个插件了。

完成后,输入 “:q” 退出 VIM。

这个插件将会被安装在 ~/.vim/plugin/LargeFile.vim 下。现在可以像平常一样使用 VIM 了。

当在 VIM 中装载一个“大”文件的时候,这个插件起的作用就是关掉事件、回退、语法高亮等功能。默认情况下大于 100MB 的文件就会被插件认为是“大文件”。要改变也个默认设置,你可以编辑 ~/.vimrc 文件(如果不存在就创建一个)。

如要把大文件的标准最小定为 10MB 的话,可以在 ~/.vimrc 中添加

let g:LargeFile=10

虽然 LargeFile 可以加速文件装载的速度,但 VIM 自身对编辑相当大的文件支持不太好,因为它会一下子把整个文件都加载进内存。例如,用 VIM 装载 1G 大小的文件,它就会占很多内存和交换空间,如下图所示的顶部输出。

所以如果你的文件明显大于你 Linux 系统的物理内存的话,就要考虑其它的选择,如下所述。

glogg 日志资源管理器

如果你只需要查看一个文本文件,并不对它做编辑,可以考虑下 glogg。它是一款基于图形用户界面的独立日志分析器。这个 glogg 分析器支持通过正则表达式和通配符来对要打开的文本文件进行过滤和筛选,使用户只看到其真正关注的内容。

在 Debian (Wheezy 版本或更高版本)、Ubuntu 或 Linux Mint 系统中安装 glogg : 

$ sudo apt-get install glogg 

在 Fedora (17 版本或更高版本) 系统中安装 glogg :

$ sudo yum install glogg 

用 glogg 打开文本文件 :

$ glogg test.log 

glogg 能很快的打开一个大文本文件。我花了大约 12 秒就打开了一个 1G 的日志文件。

在 "Text" 区域,你可以输入正则表达式,然后点击 "Search" 按纽,它支持表达式大小写敏感搜索以及自动刷新功能。搜索后,在窗体底部会显示出筛选的结果内容。

从装载文件来跟 VIM 对比, glogg 显得更轻量级,在加载完一个 1G 的日志文件后,它仅仅只使用了 83M 的物理内存。

JOE 文体编辑器

JOE 是GPL下发布的一个轻量级的基于终端的文本编辑器。JOE 是一款少有的支持大文件的文本编辑器,可以打开和编辑比物理内存大的文件。

此外,JOE支持各种功能强大的文本编辑功能,如非破坏性编辑,用正则表达式搜索和替换,无限次的撤销/重做,语法高亮等。

在 Debian、Ubuntu 或 Linux Mint 系统中安装 JOE:

$ sudo apt-get install joe 

在 Fedora、CentOS 或 RHEL 系统中安装 JOE:

$ sudo yum install joe 

要打开编辑文本文件,请运行:

$ joe test.log 

相比上面提到的 glogg 来说,用 JOE 加载一个大文本文件会有点卡,加载一个 1G 的文件要用将近 30 秒的时间,不过考虑到要对文件进行全文编辑,这还能忍受。一旦文件加载完成,就可以在相当快捷的终端模式中编辑此文件。

JOE的内存消耗令人印象深刻。加载并编辑一个1GB的文本文件,只花费47MB的物理内存。

如果你还知道在 Linux 中打开/编辑大文本文件的其它方法的话,请跟我们分享!


via: http://xmodulo.com/2013/12/open-large-text-file-linux.html

译者:runningwater 校对:jasminepeng

本文由 LCTT 原创翻译,Linux中国 荣誉推出

让GUI都玩儿蛋去!鼠标是你的敌人!只有键盘才是你唯一的朋友!

如果把Vim和Tmux结合在一起会发生什么?你将拥有完美的编程环境!下面是我多年来珍藏的一些不传之秘,有了这些,你立刻就能轻松打造出属于你的Vim开发环境。

Tmux相关

  • Tmux速成班,这个不错,可以让你快速掌握如何开始使用Tmux。
  • 这是我的tmux.conf配置文件,它有一个定制状态栏,可以大大改进颜色主题、优化可读性,里面还有一个必不可少的操作:重设快捷将,因为Ctrl+bVim要用,因此它帮你改为了Ctrl+a。
  • 其实,构建优化IDE就像写一个bash脚本一样简单。链接内的例子展示了如何编写一个.sh脚本来运行你自己的编程环境。

Vim插件

  • Vundle,Vim的插件管理器,用它可以跟踪.vimrc文件中的所有插件,还可以进行脚本的一键安装、更新或删除。额,我会告诉你用它还可以直接在Vim里搜索插件吗?总之,这个插件扩展绝对是居家旅行、杀人越货之Vim必备佳品。
  • Syntastic 可以检测语法是否正确,写代码的时候要想避免低级错误,这个工具必不可少,它的确能大大提高你的代码编写速度。
  • Supertab,这款插件可以帮助你使用实现自动补全。它会搜索当前文档中的所有字符串,然后给出所有的匹配项建议。对写代码带来的好处不只是提升速度,还可以避免很多拼写错误。如果有兴趣,在本文最后一部分用户推荐,有此插件的替代品。
  • Ack,99%的用户会选择用它代替grep。它完美集成在Vim里,用户可以直接用它搜索项目文件,搜索结果则显示在一个独立的窗口里。在本文最后一部分用户推荐,也有此插件的替代品。
  • CtrlP 能够极快的模糊搜索全路径文件、缓冲区、“最近使用”(MRU)和标签等等,纯粹用VimL写成,专为Vim搜索。
  • NERDTree 可以帮你浏览整个文件系统、打开文件或目录。它以树形结构显示整个文件系统,支持键盘操作和简单的文件系统操作。
  • Sparkup可以帮助你更快的编写HTML代码。支持类CSS语法完整的HTML扩展代码。在本文最后一部分用户推荐,也有此插件的替代品。

小贴士

  • Vimux可以帮你在Vim中与Tmux进行交互。例如在不需要离开Vim的情况下进行测试、编写脚本、建立任务等。
  • 《自动安装Vundle》这篇文章介绍了在.vimrc配置文件中只需添加几行VimL脚本,这样每次你在一个新环境中运行Vim的时候,它就能自动安装Vundle及所有关联包。在你拷贝Vim配置文件到一个新环境或新的服务器时,这是非常有用的。
  • 一名开发者的成功故事介绍了他是如何告别他曾经最信任的MacBook Pro,并改用iPad + Linode在云上开始开发工作。

用户推荐

  • YouCompleteMe,由Reddit用户hnasarat推荐。它安装起来稍微麻烦一些,但是支持非常强大的语法补全,包括C、Ruby、Python、PHP等许多语言。
  • Ag,由gckjk推荐,大多数Reddit用户都知道它,这是升级版的ack,速度快了3到5倍。它能读取.gitignore和.hgignore,或者.agignore,从而忽略一些被版本控制软件所忽略的匹配文件(译注:不加入版本库的文件,我想你大多数时候没有搜索它的意图)。
  • Emmet,由另一个资深reddit用户damnated推荐。这是一款Sparkup的替代品,可以非常方便快速地用标签标记字符串。链接里有示例演示视频。
  • Unite由网友 basetta推荐,它可以作为前面多个插件的集大成者。你可以用它搜索文件(就像CtrlP),搜索文档内容(就像ack或ag),还可以在下拉历史或缓冲区间进行自由移动和切换。所有这些功能都集成在了这一个插件里,非常方便!

via: http://devcharm.com/pages/18-vim-is-your-new-ide

译者:Mr小眼儿 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

原文:Vim 复制粘帖格式错乱问题的解决办法

有时候,复制文本(尤其是代码)到 Vim,会出现格式错乱的问题。看样子,应该是自动缩进惹得祸。本文不去深究原因,直接给出解决方法。

  1. paste 模式

运行如下命令,进入 paste 模式:

:set paste

进入 paste 模式后,按 i 键进入插入模式,然后再粘帖,文本格式不会错乱了。但粘帖后还需要按 进入普通模式并执行如下命令结束 paste 模式:

:set nopaste

显然,这样非常麻烦。下面我们进行改进。

  1. 快捷键一

我们可以利用设置快捷键来简化上面的两个命令。在 ~/.vimrc 中加入如下两行:

map  :set paste
map  :set nopaste

这样,在普通模式下按 F10 (你也可以用自己喜欢的按键)就会进入 paste 模式,按 i 进入插入模式后粘帖,然后按 回到普通模式,再按 F11 结束 paste 模式。
这样虽然方便了,但占用了两个按键。下面我们继续改进。

  1. 快捷键二

在 ~/.vimrc 中加入如下内容:

set pastetoggle=

这样就可以把上面的 F10 和 F11 合并为一个快捷键来切换 paste 模式了。
还有更好的办法么?当然!

  1. Vim 寄存器一

关于 Vim 寄存器的详细信息请执行命令 “:help registers” 查看。
对于“剪切板”这个概念,Linux 下有两个东西:一个叫做选择缓冲区(X11 selection buffer),另一个才是剪切板(clipboard)。鼠标或键盘选择内容时,内容实时进入缓冲区,然后按中键将内容插入光标所在位置;鼠标或键盘选择内容后,按Ctrl-C(或Shift-Ctrl-C)或菜单中的“复制”,内容进入剪切板,然后按Ctrl-V(或Shift-Ctrl-V)或菜单中的“粘帖”将内容插入光标所在位置。关于这两者的详细信息,请自行搜索,此处不深究。
Vim 的寄存器 "* 对应系统缓冲区, 寄存器 "+ 对应系统剪切板。
如果你是把选择的内容(在系统缓冲区中)粘帖到 Vim ,只需在普通模式下执行如下命令:

"*p

对应的,如果你是把复制的内容(在系统剪切板中)粘帖到 Vim,只需在普通模式下执行如下命令:

"+p

怎么样?格式没有错乱了吧?
这样虽然简便很多了,但还是需要输入三个字母,并且这三个字母都得使用右手小拇指输入,甚至其中的两个字母还需要 shift 键配合!
还有更简单的办法。

  1. Vim 寄存器二

在 ~/.vimrc 里加入如下内容:

set clipboard=unnamed

然后只需在普通模式下按 p 即可把系统缓冲区中的内容粘帖到 Vim 中,就像粘帖用 yy 命令得到的内容一样,并且格式不错乱。
如果把上面的一行换成如下内容:

set clipboard=unnamedplus

普通模式下按 p 粘帖的内容就是系统剪切板里的内容了。
这已经足够简便了。在搜索此问题的过程中,我还看到了另外一些办法。

  1. 快捷键三

在 ~/.vimrc 里加入如下内容:

inoremap  :setl pastegi+:setl nopastegi

这样,你就可以在插入模式下使用 Shift-Insert 快捷键在粘帖系统剪贴板中的内容了。
把上面一行替换成如下内容同样可以达到相同的效果:

inoremap  "+p`]a

注意,这可是在插入模式下哦!比起第 5 节提到的方法,这种方法省去了一次 按键进入普通模式和一次 i 按键重新回到插入模式。
至此,你需要做的只是:
a. 复制你想要的内容;
b. 回到 Vim 并按 Shift-Insert 快捷键;
c. 继续编辑其他内容。

参考