.vimrc的編輯方法介紹

轉自:http://www.cnblogs.com/starspace/archive/2009/03/03/1402305.html

前言

工欲善其事,必先利其器。一個programmer必然要先有一個好的editor。vim就是一個十分強大的編輯器。它的強大之處,在於其個性化和可定製。學習vim,就像學習Linux,學習perl,你發現你可以讓它來適應自己,你發現你只需要學一點點就可以工作了;而當你繼續學習下去,你會驚奇的發現它的“新”功能能夠極大的提高你的工作效率;就是這樣,你學習的興趣將始終超過學習的難度,因此促使你一直鑽研下去……另外一點,你總是可以找到vim,至少是vi,可是你可能不會在你的公司的Sun機器上找到記事本,也可能不會在AIX上找到emacs——除非你是root,你可以自己裝一個:)我無意把vim和其他編輯器比較,我只知道Larry Wall用vim。言歸正傳,個性化vim最基本也是最重要的就是編寫vimrc文件(不要說你不知道vimrc在哪裏,它就在你的home目錄下,名字叫做.vimrc)。

1. 註釋
寫程序之前,第一件事情不是瞭解語法,而是知道如何寫註釋。
vimrc腳本的註釋是使用引號(")作行註釋。

2. 變量
(1) 標量變量
可以是數字或字符串,基本與perl相同。
命名方式爲:作用域:變量名,常用的有如下幾種:
b:name —— 只對當前buffer有效的變量
w:name —— 只對當前窗口有效的變量
g:name —— 全局變量
v:name —— vim預定義變量
a:name —— 函數的參變量
注意:引用標量變量的時候請包含作用域和冒號

(2) 一類有特殊含義的變量
命名方式:Fun Character(這個詞請參看Programming Perl)加上變量名
共有三類:
$NAME —— 環境變量(一般變量名都是大寫)
&name —— 選項(vim處理某些事情的時候的默認設置)
@r —— register(寄存器,不是彙編的EAX,EBX,看第2部分vim tips)
常見環境變量例子:$VIMRUNTIME —— vim運行路徑
常見選項例子:&ic —— ignorecase
注:使用set命令可以改變選項設置,例如:
:set ignorecase
使用一個set命令可以看到當前所有的選項及其設置。

(3) 變量賦值
:let 變量名=值
注意:最前面的冒號不僅是爲了表示這是一個冒號命令,而且是必須的。

釋放變量::unlet! 變量名

(4) 運算符(和perl基本一樣)
數學運算:+ - * / % .
邏輯運算:== != > >= < <= ?:
正則匹配運算符=~ !~

3. 控制結構
(1) if 條件
語句塊
elseif 條件
語句塊
else
語句塊
endif
注意:條件表達式不需要小括號,語句塊不需要大括號

(2) while 條件
語句塊
[break/continue]
endwhile

4. 函數:

定義:
function 函數名(參數)
函數體
endfunc

調用:
在腳本語句中使用 call 函數名(參數)
在vim命令中使用 :call 函數名(參數)

注:在函數體中使用參數需要在參數變量名稱前加上a:,例如參數名爲
keyword,
則函數體中使用a:keyword來引用

注:常用系統函數 參見【附】。

5. 執行命令,鍵盤綁定,命令行命令和自動命令
(1) 執行命令
exec "命令" —— 用於在vim腳本中執行一系列vim命令
:!外部命令 —— 這是一個vim命令行命令,功能是調用外部程序
(2) 鍵盤綁定 :help map-overview
vim最大的特點在於可以把所有的操作能夠用一個命令字符串表達出來,
因此這帶來了編寫腳本的最大的便利。鍵盤綁定就是一個例子,這個功能允許
把一個命令字符串綁定到一個按鍵/按鍵組合。

一般格式:映射命令 按鍵組合 命令組合
例子:nmap c ^i#<Esc>j
解釋:映射normal模式下的按鍵c爲:^i#<Esc>j,就是在該行開頭加上#號
,然後下移一行

常用映射命令:
map :全模式映射
nmap :normal模式映射
vmap :visual模式映射
imap :insert模式映射

(3) 命令行命令
vim支持在啓動的時候使用-c開關執行命令字符串,例如:
$ cat n
#!/bin/sh
vim -c "set filetype=$PERL" -c "s.$.#!/usr/bin/$PERL -w"r"r." -c
":nohlsearch" $1
設置文件類型 寫入#!/usr/bin/perl -w
取消匹配加亮
$ n myperlfile
(4) 自動命令
一般格式:autocmd 事件 文件類型 命令
例子:au BufNewFile,BufRead *.pl setf perl
解釋:當事件 BufNewFile 和 BufRead 發生在 *.pl 文件上的時候,
執行命令:setf perl

========================================================================
【附】常用系統函數 :help function-list

函數 返回值 解釋

(1)字符串操作
char2nr( {expr}) Number {expr}中字符的ASCII值
nr2char( {expr}) String {expr}中ASCII值對應的字符
escape( {string}, {chars}) String 使用'"'對{string}中的字符
{chars}進行轉義
strtrans( {expr}) String 把字符串轉換成可打印字符串
tolower( {expr}) String 將字符串{expr}小寫
toupper( {expr}) String 將字符串{expr}大寫
match( {expr}, {pat}[, {start}])
Number {pat}在{expr}中的匹配位置
matchend( {expr}, {pat}[, {start})
Number {pat}在{expr}中的最後匹配位

matchstr( {expr}, {pat}[, {start}])
String {pat}在{expr}中的匹配,成功
返回{pat},失敗返回""
stridx( {haystack}, {needle}) Number {needle}在{haystack}中的始
索引位置
strridx( {haystack}, {needle}) Number {needle}在{haystack}中的終
索引位置
strlen( {expr}) Number 字符串{expr}的長度
substitute( {expr}, {pat}, {sub}, {flags})
String 用{sub}替換{expr}中的模式
{pat}
submatch( {nr}) String ":substitute"的特殊匹配
strpart( {src}, {start}[, {len}])
String 子串函數,在{src}中從
{start}開始取出{len}個字符
expand( {expr}) String 擴展{expr}中的字符串
type( {name}) Number 變量{name}的類型

(2)操作當前緩衝區中的文本
byte2line( {byte}) Number 字節數爲{byte}的行
line2byte( {lnum}) Number 行號爲{lnum}的行的字節數
col( {expr}) Number {expr}的列號:. 光標所在列
$ 末列 "x 標記x所在位置
virtcol( {expr}) Number {expr}的屏幕列號(screen
column)
line( {expr}) Number {expr}的行號
wincol() Number {expr}的窗口列號(screen
column)
winline() Number {expr}的窗口行號(screen
column)
getline( {expr}) Number {expr}的行號
setline( {lnum}, {line}) Number 把{line}寫入{lnum}行
append( {lnum}, {string}) Number 在{lnum}行下一行加入
{string}
indent( {lnum}) Number 縮進行{lnum}
cindent( {lnum}) Number C格式縮進行{lnum}
lispindent( {lnum}) Number Lisp格式縮進行{lnum}
nextnonblank( {lnum}) Number 行號 >= {lnum} 的非空白行的
行號
prevnonblank( {lnum}) Number 行號 <= {lnum} 的非空白行的
行號
search( {pattern} [, {flags}]) Number 查找{pattern}
searchpair( {start}, {middle}, {end} [, {flags} [, {skip}]])
Number 查找 始/末對 的另一個末端


(3)系統函數和文件操作
browse( {save}, {title}, {initdir}, {default})
String 啓動一個文件請求
glob( {expr}]) String 展開一個fileglob {expr}
globpath( {path}, {expr}) String 對{path}中的所有目錄調用
glob({expr})
resolve( {filename}) String 得到符號鏈接的指向
fnamemodify( {fname}, {mods}) String 更改文件名
executable( {expr}) Number 如果{expr}存在且可執行,則

filereadable( {file}) Number 如果{file}可讀,則真
isdirectory( {directory}) Number 如果{directory}存在,則真
getcwd() String 當前工作目錄
getfsize( {fname}) Number 文件字節數
getftime( {fname}) Number 文件最終修改時間
localtime() Number 當前時間
strftime( {format}[, {time}]) String 格式化的時間
tempname() String 生成一個臨時文件名
delete( {fname}) Number 刪除文件{fname}
rename( {from}, {to}) Number 重命名{from}成{to}
system( {expr}) String 執行shell命令{expr}
hostname() String 機器名

(4)緩衝區,窗口,參數列表
argc() Number 參數列表中的文件個數
argidx() Number 參數列表中當前索引值
argv( {nr}) String 參數列表中第{nr}個
bufexists( {var}) Number 如果{var}存在則真
buflisted( {expr}) Number 如果{expr}被列出則真
bufloaded( {expr}) Number 如果{expr}被加載則真
bufname( {expr}) String 緩衝{expr}的名字
bufnr( {expr}) Number 緩衝{expr}的緩衝序號
winnr() Number 當前窗口的窗口序號
bufwinnr( {expr}) Number 指定緩衝的窗口序號
winbufnr( {nr}) Number 指定窗口的緩衝序號
getbufvar( {expr}, {varname}) 得到緩衝{expr}的特殊變量
{varname}的值
setbufvar( {expr}, {varname}, {val}) 設置緩衝{expr}的特殊變量
{varname}的值爲{val}
getwinvar( {nr}, {varname}) 得到窗口{nr}的特殊變量
{varname}的值
setwinvar( {nr}, {varname}, {val}) 設置窗口{nr}的特殊變量
{varname}的值爲{val}

(5)摺疊(Folding)
foldclosed( {lnum}) Number 如果{lnum}行的摺疊閉合了,
返回第一行
foldlevel( {lnum}) Number {lnum}行的摺疊級數
foldtext( ) String 生成一個閉合摺疊的表示

(6)語法加亮
hlexists( {name}) Number 如果命名爲{name}的高亮組存
在,則真
hlID( {name}) Number 名字爲{name}的高亮組的語法
ID
synID( {line}, {col}, {trans}) Number {line}行{col}列的語法ID
synIDattr( {synID}, {what} [, {mode}])
String 返回語法ID {synID}的{what}
屬性
synIDtrans( {synID}) Number 翻譯的語法ID {synID}

(7)歷史
histadd( {history},{item}) String 向歷史中增加一項
histdel( {history} [, {item}]) String 在歷史中刪除一項
histget( {history} [, {index}]) String 在歷史中取出索引{index}的項
histnr( {history}) Number 歷史項最大索引

(8)交互
confirm( {msg} [, {choices} [, {default} [, {type}]]])
Number 返回用戶選擇的項序號
getchar( [expr]) Number 獲得一個輸入字符
getcharmod( ) Number 修改最後一個輸入的字符
input( {prompt} [, {text}]) String 獲得用戶輸入
inputsecret( {prompt} [, {text}]) String 獲得用戶輸入,但是不回顯
inputdialog( {prompt} [, {text}]) String 產生一個GUI對話框以獲得用
戶輸入

(9)Vim服務器
serverlist() String 返回一個可用的服務器列表
remote_send( {server}, {string} [, {idvar}])
String 送出key序列

remote_expr( {server}, {string} [, {idvar}])
String 送出表達式
server2client( {serverid}, {string})
Number 送出回覆串
remote_peek( {serverid} [, {retvar}])
Number 檢查回覆串
remote_read( {serverid}) String 讀取回復串
foreground( ) Number 把vim窗口帶到前臺
remote_foreground( {server}) Number 把vim服務器帶到前臺

(10)變量檢查
mode() String 返回當前編輯方式
visualmode() String 返回最後一次visual模式的使

hasmapto( {what} [, {mode}]) Number 如果存在{what}的映射則真
mapcheck( {name}[, {mode}]) String 檢查所有被{name}匹配的映射
名稱
maparg( {name}[, {mode}]) String 在模式{mode}下的映射{name}
的rhs值
exists( {var}) Number 如果{var}存在則真
has( {feature}) Number 如果特性{feature}被支持則真
cscope_connection( [{num} , {dbpath} [, {prepend}]])
Number 檢查是否存在cscope連接
did_filetype( {name}) Number 設置文件類型的自動命令
{name}存在則真
eventhandler( ) Number 如果在一個事件處理中則真
getwinposx() Number vim窗口在GUI模式下的X軸座標
象素數
getwinposy() Number vim窗口在GUI模式下的Y軸座標
象素數
winheight( {nr}) Number 窗口{nr}的高度
winwidth( {nr}) Number 窗口{nr}的寬度
libcall( {lib}, {func}, {arg}) String 使用參數{arg}調用在{lib}中
的函數{func}
libcallnr( {lib}, {func}, {arg})
Number 和上一個函數相同,用於返回
整數的函數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章