Vim hacks

编辑模式

normal mode

motion

# comments ...
 
foreach my $foo ( @bar ) {
    
    # 做點事情

    my @outs = grep /pattern/ , @list;
	 	
}

sub func1 {

}
按键 效果
f@ 向后查找@
[{ 到最内层块
$ 行末
^ 行首(非空白)
H/M/L 光标到窗口顶部/中部/底部
h/j/k/l 光标左/下/上/右移动一个字符
C 更改光标后一行内容
% 跳到相配对的符号

Insert Mode


Visual mode

select region



语法标记

可自订Syntax

~/.vim/syntax/[filetype].vim
syn match [id] [re] [options]
syn region [id] start=[re] end=[re]
syn keyword [id] [keyword] ...
hi [id] guibg=[color] ctermfg=[color]

请参见|:help syntax|



编码支援

在vimrc中加入:

set fencs=utf-8,gbk,big5,euc-jp,utf-16le
set fenc=utf-8 enc=utf-8 tenc=utf-8

ps:vim会从开始编码读取文件,若是失败则从下一个读取。

请参见|:help encoding|



快捷键

mapping meanings
:nmap (normal mode)
:imap (visual mode)
:smap (insert mode)
:xmap (select mode)
:vmap (visual , select mode)
:map (all)
... ...

参见|:h map.txt|



文字物件

Operator Mapping

operator meaning
v/c/d visual/change/delete
i/a Inner Object/An Object
{/[/(/"/' region:{}/[]/()/""/''

for instance ci[



分页支持

:tabnew
:tabedit path/to/file
:tabfind path/to/file

请参见|:help tabpage.txt|



代码折叠(not try)

Fold Methods

Syntax Fold

:set foldmethod=syntax
以程式語言語法做為折疊規則。
某些特定的設定可以參考
$VIMRUNTIME/syntax/*.vim

Marker Fold

:set foldmethod=marker
以特定標記作為折疊規則,
預設是 “{{{“ 以及 “}}}”

Indent Fold

:set foldmethod=indent
以縮排作為折疊規則

Manual Fold

:set foldmethod=manual
手動建立折疊區塊,
zf 鍵建立。
autocmd BufWinLeave *.* silent mkview
autocmd BufWinEnter *.* silent loadview
利用 autocmd 加上 mkview , loadview 來儲存手動建立
的折疊區塊,儲存的折疊會被放在 ~/.vim/view/ 裡頭。

Expr FoldCustom Fold Function

:setfoldexpr=MyFoldLevel(v:lnum)
呼叫自訂的折疊函式


Modeling & FileType(not try)

ModeLine

" vim:fdm=marker:sw=2:ts=2:et:fdl=0:
"============================
" Author:
Cornelius <
cornelius.howl{at}gmail{dot}com >

開啟此檔時,使用 Marker 作為折疊,
縮排為兩個空隔,將 Tab 延展為空白,
折疊所有的 Fold (Level 0 以上)

FileType

~/.vim/ftplugin/ruby.vim

針對某種檔案類型的設定
不一定都要寫在 vimrc 內

~/.vim/filetype.vim

可在 filetype.vim 內定義新
的檔案類型。


格式化(not try)

:set equalprg=perltidy

可針對特定區塊重新排列程式碼
選擇文字區塊後,按下 “=” 鍵,可使用
外部的 perltidy 程式來做格式化處理。

autocmd Filetype perl :set equalprg=perltidy

可使用 autocmd 針對檔案類型做equalprg 設定

autocmd Filetype c :set equalprg=indent

開啟 C 程式碼時,使用外部的 GNU Ident 程式來做格式化處理。
$ cat bin/sql-beautify.pl
#!/usr/bin/env perl
use warnings;
use strict;
use SQL::Beautify;
local $/;
my $sql = SQL::Beautify->new( query => <STDIN> , spaces =>
4 , break => "\n" );
print $sql->beautify;

autocmd Filetype sql :set equalprg=sql-beautify.pl

開啟 SQL 程式碼時,使用外部的
Filter 來做格式化處理。


QuickFix(not try)

:grep & :make
:grep [pattern] [filepath]

呼叫 grepprg (預設 vimgrep) 執行,並
將 grep 的結果彙整至 QuickFix

[image/quickfix|quickfix window] set grepprg=/path/to/grep

置 grepprg (預設 VIM 內建 grep)

:make

呼叫 makeprg (預設 make) 執行
Makefile. 並以該語言的 compiler
output parser 彙整結果。

set makeprg=gmake

設置 makeprg (預設 make)

:copen

開啟 QuickFix Window

cclose

關閉 QuickFix Window

:cnext

下一个Result

|:cprevious

上一个Result
QuickFix Window Toggle
com! -bang -nargs=? QFix cal QFixToggle(<bang>0)
fu! QFixToggle(forced)
if exists("g:qfix_win") && a:forced == 0
cclose
unlet g:qfix_win
else
copen 10
let g:qfix_win = bufnr("$")
en
endf
nn
 <leader>q :QFix<cr>
nmap 至 “\q” , <leader> 預設為 “\” 鍵


插件

Vimana:vim script manager
powered by perl
You can use it by:

  1. 使用cpan安装Vimana
    $ cpan Vimana
  2. 搜寻
    $ vimana search xml
  3. 查詢 script 資訊
    $ vimana info xml.vim
  4. 安裝 xml.vim 外掛
    $ vimana install xml.vim

the git repository


changelog 2012年02月06日 星期一 21时54分19秒


blog comments powered by Disqus

Valid XHTML 1.0 Strict This page is Vim powered