`
zhangym124
  • 浏览: 345175 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

计算机工具—VIM (转)

阅读更多

前面曾经简单的介绍过我现在使用的一些计算机工具,接下来我希望对于这些工具进行更加细致的介绍。这篇文章首先来介绍我目前使用频率最高的文本编辑器vim,也算是对于我所知道的vim的一个小小总结。

作为一个流行的文本编辑工具,关于vim使用的文章有很多,很多专门的书籍介绍它,还有其自带强大的文档。如果逐条的去查看它所有的特性,很可能会被其灵活而强大的功能所吸引。但是我觉得作为一个工具的使用者,并不一定需要掌握工具所提供的全部功能,重要的是找到其适合自己的特性。当然,作为一名资深装逼爱好者,我也能深深的体会到那些为了装逼炫耀而刻苦学习各种奇淫异巧的同胞的良苦用心,毕竟使用Emacs烧咖啡会让人(特别是女孩子)感觉很酷 ^_^

回归正题,本文虽然是在讲vim,但其实我是想通过他来总结一下日常工作中比较有用的文本编辑器的特性,只是通过vim把这些特性表现出来。

使用背景

首先介绍其适合的人群,我介绍的这些特性并不一定适合于所有人。工作中,我主要用vim来编辑C/C++,Python,PHP程序以及Linux系统当中的一些配置文件,所以我介绍的这些特性更多的是与程序员有关。

基本编辑功能

作为一个编辑器,首先当然需要具有普通记事本一样的编辑功能。vim当然可以覆盖所有记事本可以完成的文本编辑功能,而且他的设计思路当中蕴涵着一条信念:键盘比鼠标更高效。所以,vim希望使用者永远不要把双手从字符键盘上移开。即使是方向键都会让你慢下来,因为你必须再次回到键盘主排来输入字符。

vim分为三种模式:插入,可视,命令。

进行文本编辑需要进入插入模式。我经常会用到如下几个命令进入插入模式:i,o,O,a,A。

其中i为在当前光标处进行插入,o为在光标的上一行插入,O为在光标的下一行插入,a为在光标之后插入,A为在光标之前插入。

我们一定要坚持使用尽可能少的时间处于插入模式,最佳的状态是在插入模式下仅做一件事情—输入文本。所以,我们要尽量在进入插入模式之前把光标调整到需要编辑的位置,上面介绍的几个进入插入模式的命令会帮助我们更加高效的编辑。

接下来说说如何控制光标的位置。下面的这些命令将可以替代鼠标,快速的确定光标的位置。

xw—向前移动x个单词,不输入x默认为一个单词,将符号和标点当符号处理。

xW—同上,但是不将符号和标点当符号处理。

xb—向后移动x个单词,不输入x默认为一个单词,将符号和标点当符号处理。

xB—同上,但不将符号和标点当符号处理。

0—移动光标到行首。

$–移动光标到行尾。

gg—移动光标到页首。

G—移动光标到页尾。

x+G—移动光标到第x行。

%–跳到配对的括号。

[[--跳转到代码块的开头。

gd—跳转到局部变量的定义处。

''—跳到光标上次停靠的位置。

x>--增加以下x行的缩进。

x<--减少以下x行的缩进。

fx—向右跳到本行字符x出(x可为任意字符)

tx--同上,区别是跳到x前

Fx—向左跳到本行字符x处

Tx—同上,区别是跳到x后

ctrl+U 上翻页

ctrl+D 下翻页

ZZ—保存并退出vim

ctrl+z--强制退出(实际上这个快捷键是linux中强制进程挂起,适用于任何进程)

)--移动光标到下一个句子

(--移动光标到上一个句子

H—移动到屏幕上面

M—移动到屏幕中间

L—移动到屏幕下面

*--读取光标处的字符串并且移动光标到它再次出现的位置

#--与上面类似,但是方向相反

对了,还有更重要的是使用hjkl作为调整光标位置的方向键,不去使用箭头。上面的这些命令组合使用,可以完全代替鼠标的定位功能,而且如果熟练掌握效率高于鼠标。

除了定位光标,鼠标的另外一个特性就是选中文本。要代替鼠标的这个功能,我们需要切换到vim的可视模式下(在命令模式下按v)。这时就可以通过各种移动光标的方式来选中文本了,例如按w就是向前选中一个单词,按)就是向前选中一个句子。

之后,我们还需要之道如何删除、复制、粘帖文本。

vim当中,d代表删除,它可以和很多命令一起使用。如:

dd—删除当前行

dw—向前删除一个单词

db—向后删除一个单词

d$--光标之后该行的剩余部分

使用d命令删除之后,所删除的文本将自动保存在寄存器当中,之后使用p就可以重新粘帖刚刚删除的文本。在可视模式下,选中文本之后,按d命令可以删除选中的文本。

y为复制命令,它同样可以与很多命令一同使用,这一点与d差不多。如:

yy—复制当前行

yw—向前复制一个单词

yb—向后复制一个单词

其它的一些编辑中所必要的命令有:

U—undo

ctrl+R—redo

/x—查找文档中的x,相当于记事本中的ctrl+f

s/old/new/g—替换old为new,如果没有g则表示只替换一个,若每次替换都需要向用户询问,则用gc。

n1,n2 s/p1/p2/g—将第n1到第n2行中所有的p1用p2替代。

vs filename—在同一个窗口中打开另外一个文件,这样可以在同一个终端下同时查看两个或多个文件。

ctrl+w+w—使用vs命令打开新文本后,用此命令来进行切换

有用的插件

熟练使用上面的这些命令已经可以非常方便的进行文本编辑了,其编辑效率将超过普通记事本。但是,仅仅把vim但做一个普通的记事本确实有点委屈他了,他拥有非常丰富的插件,根据自己不同的需求,我们可以定制适合自己的更加高效的编辑器。网上有很多介绍vim各种插件的文章,这里我简单的介绍下我自己常用的插件。

语法着色

语法着色是程序员编写代码时非常需要的一种功能,是任何一款IDE所必备的特性。我喜欢在vim当中使用各种妖艳的语法着色,所以配置文件~/.vimrc当中需要加入如下两句:

syntax enable

colorscheme zellner

这两句是说开启语法着色,并且采用zellner着色方案,当然你可以配置属于自己的语法着色方案。

这里顺便再插一句,vim也带有自动的语法检查功能,例如要实现对于php语法的检查,可以加上:

map <F5> :!/usr/bin/php5 -l %<CR>

这样按下F5,vim就可以自动的帮助检测你的php代码当中是否存在语法错误了。

函数以及文件浏览器

在编辑任何程序的时候,我们一般都会需要查看或者直接跳转到某些函数的定义处。所以我们需要一个函数列表浏览器。同时,我们可能会打开工程中其它的源文件进行编辑,这就需要一个文件列表浏览器。在vim当中,我们可以使用TagList以及WinManager来实现对于上面两个功能。

下载这两个插件,并将其放在~/.vim/plugin文件夹当中,同时在~/.vimrc当中加入如下代码:

"add TagList

let Tlist_Show_One_File=1

let Tlist_OnlyWindow=1

let Tlist_Use_Right_Window=0

let Tlist_Sort_Type='name'

let Tlist_Exit_OnlyWindow=1

let Tlist_Show_Menu=1

let Tlist_Max_Submenu_Items=10

let Tlist_Max_Tag_length=20

let Tlist_Use_SingleClick=0

let Tlist_Auto_Open=0

let Tlist_Close_On_Select=0

let Tlist_File_Fold_Auto_Close=1

let Tlist_GainFocus_On_ToggleOpen=0

let Tlist_Process_File_Always=1

let Tlist_WinHeight=10

let Tlist_WinWidth=18

let Tlist_Use_Horiz_Window=0

filetype plugin on

let g:winManagerWindowLayout='FileExplorer|TagList'

nmap wm :WMToggle<cr>

使用起来其实很简单,用vim打开任意源代码,然后按wm,屏幕就会出现如下图的侧边栏。


如果想通过ctrl+hjkl的方式在不同的窗口之间进行切换,而不需要多次按ctrl+w+w进行依次切换,需要在~/.vimrc中加入如下代码:

map <C-j> <C-W>j

map <C-k> <C-W>k

map <C-h> <C-W>h

map <C-l> <C-W>l

如果你在函数列表当中,只需要将光标停留在函数列表的某函数上,然后按回车就可以自动跳转到该函数的定义处。下面是文件浏览器当中一些常见的命令:

-   返回上一级目录

d 创建目录

D 删除目录或文件

i 切换显示方式

R 文件或目录的重命名

s 选择排序方式

自动补全

这个功能是让我怀念Visual Stdio的最大理由。因为VS强大的智能代码补全功能不仅可以快速的响应,而且还提供了非常准确的智能补全。相比起来,vim当中的智能补全要差得多了,虽然二者相应的速度相仿,但从补全排序的准确性的角度而言,感觉VS要远远强于vim。有谁能为vim开发一个更加强大的智能补全插件吗?

第一个要介绍的补全插件名叫SuperTab。下载该插件,然后在~/.vimrc中加入如下代码:

let g:SuperTabRetainCompletionType=2
let g:SuperTabDefaultCompletionType="<C-X><C-O>"

这样,在代码编辑的过程中按tab,vim就会自动进行代码补全。

另外一种方式叫new-omni-completion,你需要在~/.vimrc中加入如下两句:

filetype plugin indent on

set completeopt=longest,menu

这个功能需要ctags(这个东东很有用,我随后介绍)的辅助,设置好后,进入插入模式,在一个函数写到一半时按Ctrl+X Ctrl+O,就会弹出相应的补全列表。

一些有用的命令:

ctrl+p 向前切换

ctrl+n 向后切换

ctrl+e 退出下拉窗口,并退回到原来录入的文字

ctrl+y 退出下拉窗口,并接受当前选项

如果编辑python代码还可以使用pydict插件,不过我个人感觉这个插件远远不如supertab好用,后来果断的抛弃掉了,所以在这里就不介绍了,有兴趣的童鞋可以google一下。

多文件的无缝切换

很多时候,我们需要频繁的在两个文件之间切换进行编辑,例如在写C++程序的时候,我们需要在.h与.cpp之间进行切换。这样插件MiniBufExplorer就显得很有用了。

当你编辑一个文件的时候,这个插件派不上用场,当你在同一次vim对话中编辑第二个文件时,MiniBufExplorer就起作用了。如下图所示,可以通过左右箭头来切换并选择要编辑的文件。

需要在~/.vimrc中加入代码

set g:miniBufExplMapWindowNavVim = 1

let g:miniBufExplMapWindowNavArrows = 1

ctags

先来看看ctags,下面这段话是其官网上的介绍:

Ctags generates an index (or tag) file of language objects found in source files that allows these items to be quickly and easily located by a text editor or other utility. A tag signifies a language object for which an index entry is available (or, alternatively, the index entry created for that object).

其实ctags就是为文件当中出现的单词建立的一种类似于索引文件一样的程序。这个程序对于我们阅读代码是非常有帮助的。在读一段程序的过程中,我们往往需要之道一个函数的定义,传统的IDE通常会提供给我们跳转到函数定义的方式,我们使用ctags可以实现同样的作用。

安装好ctags之后,在源代码文件的顶级目录下运行ctags -R,然后打开vim,键入命令:

:set tag=/your project directory/tags

之后将光标放在某个被调用的函数上,按ctrl+],光标就会自动跳转到该函数的定义处。查看完后,再按ctrl+t,即可退回到刚刚编辑的位置。

此外,你还可能在调用某些函数的时候忘记这个函数的参数列表,这样就不得不跳到这个函数的定义处然后再跳回来,很麻烦。Ctags可以帮助我们在调用函数的时候显示函数的声明信息。

首先需要安装一个插件,名叫echofunc。然后在源代码的顶级目录下运行命令ctags -R –fields=+lS,打开vim,键入命令:

:set tag=/your project directory/tags

然后当你编辑完函数名,按(后,下面就会自动显示该函数的声明信息。如果这个函数存在重载,可以使用“Alt+-”和”Alt+=”来进行上下选择。

Cscope

首先同样是先介绍下cscope的features,官网上是这样说的:

你可以在代码中检索:

所有引用某符号的位置

全局定义

所有调用某函数的函数

某函数被调用的所有函数

文本字符串

正则表达

一个文件

一个文件在目录中的位置

哪些文件包含了这个头文件

安装好cscope之后,在源代码的顶级目录下运行命令cscope -Rbq。进入vim后,将刚刚生成的cscope文件导入vim::cs add /your_project_directory/cscope.out /your_project_directory。cscope的具体用法如下:cs find c|d|e|f|g|i|s|t name

s–查找本 C 符号(可以跳过注释)

g—查找本定义

d—查找本函数定义的函数

c—查找调用本函数的函数

t—查找本字符串

e–查找本 egrep 模式

f—查找本文件

i—查找包含本文件的文件

cs reset—重新初始化所有连接

Oh, my gad!居然已经写了这么多了,可累死我了。这些基本上就是我最常用到的vim了,我觉得如果能够熟练掌握这些技巧,使用vim编辑代码将会获得很高的效率。当然,你需要花一点时间去熟悉这些使用方式,而且一开始速度可能会有点慢^_^。

好吧,先写到这里,如果你看到我的文字有什么好的建议请留言回复我,这篇文字我会不断的更新,打造更加适合自己的强大编辑利器!

分享到:
评论

相关推荐

    git vim git vim git vim

    此外,还有一些涉及图像处理的书籍,如使用MATLAB和Python(PyTorch)的资源,这与Git和Vim虽然直接关联不大,但它们都是软件开发过程中的重要工具,可以帮助处理和分析数据,实现计算机视觉任务。 通过学习Git和...

    vim实验报告.docx

    Vim(Vi IMproved)是一款强大的文本编辑器,它提供了丰富的命令集和高效的编辑功能,是Linux系统中常见的文本处理工具。 1. **创建与切换目录**:在Linux中,可以使用`mkdir /tmp/vitest`命令创建名为`vitest`的...

    vim的桌面图片

    "vim的桌面图片"指的是在个人计算机的桌面上展示的关于Vim编辑器布局的图形化表示,它通常会展示Vim的各种工作模式和界面元素,帮助用户理解和记忆其操作方式。 Vim的主要特点和知识点包括: 1. **模式切换**:Vim...

    vim7.3便携绿色版

    这种设计使得Vim可以在不同的计算机之间轻松转移,无需担心系统注册表或程序文件夹的修改,特别适合在多台电脑间切换或者在没有管理员权限的环境中使用。 "便携版"进一步强调了其便携性和无痕特性,用户在使用后...

    PyPI 官网下载 | vim-vint-0.3.11.tar.gz

    vim-vint,全称为“Vim Indentation Normalizer”,是一个用于检查和修复Vim脚本(.vimrc, .vim)的代码风格和格式的工具。它旨在帮助Vim用户保持其配置文件的整洁和规范,遵循Vim社区广泛接受的编码风格。vim-vint...

    vim plugin

    在计算机编程领域,编辑器是开发者的重要工具,而vim作为一款功能强大的文本编辑器,因其高效、可定制性高而深受程序员喜爱。vim的插件系统是其强大功能的重要组成部分,它允许用户通过安装各种插件来扩展vim的功能...

    Linux&vim常见命令.zip

    在IT领域,Linux和vim是两个非常重要的...总之,Linux和vim的熟练使用是IT专业人士的基本技能,它们提供了高效的工作方式,能够让你更好地理解和管理计算机系统。不断练习和探索,你将能够充分利用这些工具的强大功能。

    vim安装包已经集成我环境

    这个压缩包文件包含了你在个人计算机上配置过的Vim环境,使得其他用户可以下载并直接使用。尽管如此,由于每个用户的系统环境和个性化设置可能有所不同,有些组件或插件可能仍然需要根据具体情况进行重新安装。 **...

    绿色vim及添加右键快捷方式

    这种便携式的设置使得绿色Vim成为那些频繁在不同计算机间切换或者不想修改系统环境的程序员的理想选择。 “添加右键快捷方式”是指将Vim编辑器的启动命令添加到Windows系统的右键菜单中,以便用户在需要编辑文本...

    VIM 中文文档

    2. **解压**:解压缩文件到你的计算机上,通常使用`unzip`或`tar`命令,根据你的操作系统选择合适的工具。例如,在Linux或Mac上,你可以使用`unzip vimcdoc-1.8.0.zip`,在Windows上,可以使用内置的解压缩工具或者...

    asm 编程软件soft.zip dosbox debug vim三个软件

    本文将详细介绍“asm编程软件soft.zip”中的三个关键工具:DOSBox、Debug和Vim,以及它们在汇编开发中的应用。 DOSBox是一款开源的DOS模拟器,它能够在现代操作系统(如Windows、Linux、Mac OS X)上运行DOS程序。...

    vim for windows (32位和64位的都有)

    Vim,全称为“Vi Improved”,是一款强大的文本编辑器,被广泛用于Linux、Unix和Windows等操作系统中。...这个文本编辑器以其强大的编辑功能和高度的自定义性,深受开发者和程序员的喜爱,是日常编码工作中的得力工具。

    ubuntu 10.10系统安装及vim(ROR)开发环境完整配置

    4. **安装插件管理器**:推荐使用Vundle作为插件管理工具,通过`git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim`安装。 5. **安装ROR开发所需插件**:在.vimrc文件中添加插件...

    vim 介绍 常用命令 键盘图

    Vim的开发者Bram Moolenaar在1980年代末开始开发Vim,最初是为了在Amiga计算机上获得类似vi的编辑体验,随后逐渐发展成为一个跨平台、功能丰富的文本编辑工具。 Vim的历史可以追溯到1991年的1.14版本,它最初是Vi的...

    NOI2.0评测系统使用指南、NOI Linux 2.0 和 Vim 指北.pdf

    【信奥】即信息学奥林匹克竞赛,是中国计算机学会组织的青少年编程竞赛,旨在提高青少年的信息技术素养和创新能力。NOI是信奥系列赛事的最高级别,通过选拔赛层层晋级,最终参与全国决赛。 以下是一些学习和使用NOI...

    Vim _ Cscope教程1

    Vim_Cscope教程1主要介绍了如何在Vim编辑器中集成和使用Cscope工具,以增强C语言开发的代码导航和查找功能。Cscope是一个强大的源代码浏览工具,它可以提供比传统的ctags更丰富的搜索类型,如定义、引用、全局变量等...

    学习vi和Vim编辑器_CN.pdf

    - **使用Vundle管理插件**:Vundle是一个Vim插件管理工具,可以帮助用户轻松地安装和管理各种插件。 - **编写Vim脚本**:通过编写`.vimrc`配置文件,可以自定义编辑器的行为,如设置快捷键、自定义命令等。 - **利用...

Global site tag (gtag.js) - Google Analytics