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
- i : Insert text before the cursor
- I : Insert text before the first non-blank in the line
- a : Append text after the cursor
- A : Append text at the end of the line
Visual mode
select region
- v : start Visual mode per character.
- V : start Visual mode linewise.
- Ctrl-v : start Visual mode blockwise. 接上 operator 如 y (yank) , d (delete) , c (change) ... etc
语法标记
可自订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|
文字物件
-
Text Object
- word
- string
- paragraph
- block
-
Action
- yank
- delete
- change
- ...etc
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:
- 使用cpan安装Vimana $ cpan Vimana
- 搜寻 $ vimana search xml
- 查詢 script 資訊 $ vimana info xml.vim
- 安裝 xml.vim 外掛 $ vimana install xml.vim
changelog 2012年02月06日 星期一 21时54分19秒