2010年2月16日星期二

GVIM多标签浏览小技巧

vim自从7.0开始,就支持tab应用了,有了tab之后,就可以省下开很多编辑视窗的烦恼。但是默认的gvim并不使用tab来打开文件。
当然,你可以用:tabnew filename命令来打开,但是相信大家更喜欢用双击来打开
。这个时候,可以用如下方法设:


在linux下可以这样打开
$gvim --remote-tab-silent filename
而在windows下,DOS下也可以象上面那样打开;而若是"双击"打开方式,则可以修改注册表
HKEY_CLASSES_ROOT\Applications\gvim.exe\shell\edit\command将其键值修改为:

"C:\Program Files\Vim\vim72\gvim.exe" -p --remote-tab-silent "%1"

而若是用鼠标右键中的"用vim编辑",先删掉注册表中的
HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers\gvim,然后手工添加鼠标右键菜单,

两种方式:

a. 直接进入注册表,在HKEY_CLASSES_ROOT\*\shell下添加项"用 vim 编辑",
再在项"用vim编辑"下添加子项"command",在其右边窗口把其键值设定为
"c:\Program Files\Vim\vim72\gvim.exe" -p --remote-tab-silent "%1"

b. 把下面的内容保存为文件gvim.reg,并将之导入注册表


Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\Edit with &Vim]
[HKEY_CLASSES_ROOT\*\shell\Edit with &Vim\command]
@="\"c:\\Program Files\\Vim\\vim72\\gvim.exe\" -p --remote-tab-silent \"%1\""

另外,也可以添加到鼠标右键中的"发送到",方法:
在Wiondows XP中,进入到目录c:\Documents and Settings\用户名\SendTo下,在Windows 7中进入到目录:
C:\Users\用户名\AppData\Roaming\Microsoft\Windows\SendTo,"鼠标右键"-
"新建"-"快捷方式",然后通过对话框的"浏览"找到gvim安装位置,这样就
建立gvim的一个快捷方式,右键单击这个快捷文件-属性-快捷方式,在"目标(T)
"的地址栏写入:
"C:\Program Files\Vim\vim72\gvim.exe" -p --remote-tab-silent "%*"

注意:上面都是默认安装gvim的地址,若不是默认地址,请自行修改。

2010年2月15日星期一

VIM TIPS--VIM中批量删除空行的方法

linux下vi中批量删除空行的方法:
可以直接使用linux的grep命令来删除,如下:
grep -v ^$ oldfilename > newfilename
但是在FreeBSD下面不行,可能是grep版本的问题,用vi的替换命令,vim的命令为:
%s/^\n//g
以上命令实现全局替换所有以回车开头的字符,替换为空。如果有多个连续的空行,想保留一个,vim的命令为:
%s/^\n$//g
还可以使用如下命令:
g/^\s*$/d
将所有不包含字符(空格也不包含)的空行删除。

删除空行,但不一次性删除所有连续空行:
:g/^$/d

--
陈永林 <vnresearch@gmail.com>

Vim Tips-处理行尾的空格以及文件尾部的多余空行

转载:
Vim Tips-处理行尾的空格以及文件尾部的多余空行
打开或者关闭文件时,自动删除行尾的空格。另外提供了一个 CleanupBuffer 函数,这个函数也提供类似的功能,此外还提供了删除文件尾部空格的能力,参数的意思就是在尾部保留几个空行,不过并没有加入自动命令,也就是说不会自动执行,而是绑定了一个热键 F2。


"Automatically remove trailing spaces when saving a file.
autocmd BufRead,BufWrite * if ! &bin | silent! %s/\s\+$//ge | endif

"Remove indenting on empty line
map <F2> :w<CR>:call CleanupBuffer(1)<CR>:noh<CR>
function! CleanupBuffer(keep)
" Skip binary files
if (&bin > 0)
return
endif

" Remove spaces and tabs from end of every line, if possible
silent! %s/\s\+$//ge

" Save current line number
let lnum = line(".")

" number of last line
let lastline = line("$")
let n = lastline

" while loop
while (1)
" content of last line
let line = getline(n)

" remove spaces and tab
if (!empty(line))
break
endif

let n = n - 1
endwhile

" Delete all empty lines at the end of file
let start = n+1+a:keep
if (start < lastline)
execute n+1+a:keep . "," . lastline . "d"
endif

" after clean spaces and tabs, jump back
exec "normal " . lnum . "G"
endfunction

--
陈永林 <vnresearch@gmail.com>