取势 明道 优术

我的vim常用小技巧 7,513 views

作者为 扶 凯 发表

vim是一个很强大,很方便的编辑器,有编辑器之王的美名.也是相当的方便.但大家可不要拿他当windows的记事本用,不然他连记事本都不如 哦.下面是我扶凯常用的一些小技巧.和大家分享.当然,大家有什么好的技巧,可一定要记的分享给我.

(1. 快速打开文件

当我们使用 ls 之类的命令,定位了一个文件时,我们可以在使用 vi 时,不在使用全路径.

例如:

ls /etc/resolv.conf 
vim !$

(2. vim的代码折叠

这个功能相当的强大,如下图.可能给一个子函数(也可以是代码块)折叠起来.有关折叠不同的语言也不一样,因为标记不一样

在vim中的折叠方式,可用选项 ‘foldmethod’ 来设定折叠方式:set fdm=*****.

有 6 种方法来选定折叠:

manual           手工定义折叠

indent             更多的缩进表示更高级别的折叠

expr                用表达式来定义折叠

syntax             用语法高亮来定义折叠

diff                  对没有更改的文本进行折叠

marker            对文中的标志折叠

象我是用set fdm=marker,然后我自己写的vim的折叠代码,让他自动折叠perl的子函数,只要是sub name {} 都折叠

常用的折叠快捷键

zf  创建折叠(使用数字表示创建有当前行到下多少行的折叠,比如3j就创建包括4行的折叠)

zo  打开折叠(l也可以打开折叠)

zc  关闭当前折叠

zm  关闭所有折叠

zr  打开所有折叠

zE  删除所有折叠

zd  删除当前折叠

za  若当前打开则关闭,若当前关闭则打开

zj  到下一折叠的开始处

zk  到上一折叠的末尾

好用的插件

taglist.vim  支持函数列表在边上显示,在 Vim 中使用 :Tlist 来显示
grep.vim 插件,过滤高度
Cscope  这是一个超级 ctags .可以查到函数那些地方被调用了,可以用 yum 来安装.
使用:
创建索引文件

cscope -Rqb

让vim支持查看函数列表

图形界面下的很多编辑软件都可以列出当前编辑文件中的函数列表,以便在编辑的时候能够快速的跳转.其实VIM也可以很好的实现的

首先还是安装新的Exuberant Ctags

apt-get install exuberant-ctags.
Centos 有关的话就是 ctag

yum install ctag

 

要显示的话,还需要下载下载taglist_45.zip,解压到home目录下的.vim子目录中:

http://www.vim.org/scripts/script.php?script_id=273

mkdir ~/.vim

cd ~/.vim

unzip taglist_45.zip

用法:

:helptags .   #建立生成文件的索引,然后才能正常使用帮助

:TlistToggle  #命令切换函数列表的开、关.按ctrl键然后按两下w键在正常编辑区域和tags区域中切换.

常用的几项.vimrc设置:

把方法列表放在屏幕的右侧 let Tlist_Use_Right_Window=1

让当前不被编辑的文件的方法列表自动折叠起来,这样可以节约一些屏幕空间 let Tlist_File_Fold_Auto_Close=1

vim中使用标记在程序中移动

Vim 允许你在文本中放置自定义的标记.命令 “ma” 用 a 标记当前的光标位置.你可以在文本中使用 26 个标记 (a 到 z).这些标记是不可见的,只是一个由 Vim 记住的位置.

要跳到一个你定义的标记,可以使用命令 `{mark},这里 {mark} 是指定义标记的那个字母.

ma     把当前位置存成标签a

`a     移到跳转到标记 a处

:marks 取得所有的标记的列表

到有一些特殊的标记,包括:

‘       跳转前的光标位置

“       最后编辑的光标位置

[       最后修改的开始位置

]       最后修改的结束位置

注:mark仅在当前文件跳转有效,jumps可在多个文件之间来回跳转

多行操作列模式ctrl+v,(我超级喜欢的一个功能)

这个可是我请教Flw王大师学来的.

ctrl+v进入列模式,上下左右选择块,然后按大写的I,插入注释符#之类也可以按dd删除

模式行(modeline)

编辑文件时常常指定一些选项,比如缩进量、是否将制表符转换成空格等.我想没人愿意每次进入一个vim都手工输入一大堆的 Tab 和缩进设定.换了新的机器修改文件原有的设置就丢失了,还有如果我编辑的代码不止一种风格呢?——考虑一下,如果你参加开源软件项目,你能保证你参加的所 有项目,还有你公司里的软件项目,代码风格都一样吗?

为了解决这些文件,有 vim 中有一个 vim 可以识别文件中的特殊行.这个特性在 vim 中叫做模式行.vim 是我用过的第一个支持在文件中记录代码风格设定的编辑器.实际上,它所做的是在打开文件时根据文件中的 vim 指令设定相关的 vim 选项.下面就是一个嵌

在 C 源代码中的模式行:

/* vim: set tabstop=4 shiftwidth=4 expandtab: */

Perl 的模式行

# vim: ai ts=4 sts=4 et sw=4 ft=perl
# vim: autoindent tabstop=4 shiftwidth=4 expandtab softtabstop=4 filetype=perl

Python 的模式行

# vim: ai ts=4 sts=4 et sw=4 ft=python
# vim: autoindent tabstop=4 shiftwidth=4 expandtab softtabstop=4 filetype=python

Go 语言的模式行

//
// vim: tabstop=4 softtabstop=4 shiftwidth=4 noexpandtab tw=72
// run 'go fmt' before checking in your code!
//


模式行有好几种形式.行首的“/*”和尾部的“*/”告诉 C 编译器这是一行注释,不是代码的一部分;而 Vim 可通过后面的“vim:”识别出模式行的开始(必须出现在行首或前面有一个空白字符);后面则是“set”和空格间隔开的一串 Vim 选项;“:”表示模式行结束.

这种方式非常简单,功能也非常强大.另外请注意,出于安全的考虑,模式行中的选项只影响当前文件(“:help modeline-local”),也不能做任何设置选项以外的工作.

如果你这个设置不能生效的话, 看看你的 .vimrc 中有没有 "set modeline". 你可以在 vim 下通过 :set modeline? 来看结果,如果是 nomodeline 就一定不会生效.

也许你会觉得这些很有用的小功能:

改变窗口命令

ctrl+w s     水平分割窗口

ctrl+w w     切换窗口

ctrl+w q     退出当前窗口(由于同时有多个文件,此命令不会影响其他窗口)

ctrl+w v     垂直分割窗口

shift+% 跳转到与之匹配的括号处

.   重复上次的修改命令

`.  跳转到最近修改过的位置

ga  显示光标下的字符在当前使用的 encoding 下的内码

guw  光标下的单词变为小写

gUw  光标下的单词变为大写

set list 显示vim中所有的特殊符号

VIM 用空格替换 Tab

:set ts=4
:set expandtab
:%retab

我的vim配置

set tabstop=4     #制表符的宽度为4个空格
set expandtab     #Tab 键时使用空格替代
set shiftwidth=4   #缩进的空格数为4个空格
set nocompatible  #将使 vim 以比默认的 vi 兼容模式功能更强的方式运行
set fdm=marker   #代码折叠
let &termencoding=&encoding   #语言支持
set fileencodings=utf-8,gbk,ucs-bom,cp936   #对语言的支持,utf8和gbk之类
colorscheme delek   #vim的高亮的彩色,我喜欢用这个
au BufReadPost * if line(“‘\”") > 0|if line(“‘\”") <= line(“$”)|exe(“norm ‘\”")|else|exe “norm $”|endif|endif #打开文件时,按照 viminfo 保存的上次关闭时的光标位置重新设置光标





来了就留个评论吧! 1个评论



    niejieqiang 2011年06月9日 的 07:30

    ls /etc/resolv.conf
    vim !$
    ======================
    按ALT_. 也能达到 !$ 的效果。 感觉!$比较难按。。嘿嘿