[Linux 常用技巧] 我的vim常用小技巧

Oct 15th, 2009

转载本站文章请注明,转载自:扶凯[http://www.php-oa.com]

本文链接: http://www.php-oa.com/2009/10/15/vim.html

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  到上一折叠的末尾

让vim支持查看函数列表

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

首先还是安装新的Exuberant Ctags

apt-get install exuberant-ctags.

要显示的话,还需要下载下载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的模式行

#vi:set tw=0 ts=8 sw=8 noet nowrap ft=c fdm=syntax nobackup tabstop=4 shiftwidth=4 foldmethod=marker: #

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

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

改变窗口命令

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 保存的上次关闭时的光标位置重新设置光标

Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪 ViVi 365Key 网摘 天极网摘 和讯网摘 博拉网 POCO 网摘 饭否 QQ 书签 Digbuzz 我挖网 Mister Wong
  1. niejieqiang
    Jun 9th, 2011 at 07:30
    Reply | Quote | #1

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