VimScriptMemo
Vim Script(vim6)に関する自分用のメモです。
参考資料
- help eval もしくは http
- //www.kaoriya.net/vimdoc_j/ の eval.txtやusr_41.txt
以下の記述はVim 6に対してのものです。Vim 7ではいろいろ機能が追加されている模様。
変数
変数は2種類の型しかない。数値と文字列である。 真偽値は数値で表現される(Cと同じく、0が偽でそれ以外が真)。
文字列
文字列の連結には「.」を使う。
echo "my name is" . name
文字列どうしの比較には「?」もしくは「#」(case sensitive) を使う。
「==」を使った場合、大小文字を区別するかは'ignorecase'による。
"string" =~ "\\w*" "string" !~ "\\w*"
のように書くことで、正規表現にマッチするかどうかを調べられる。 このとき、'magic'が設定され'cpoptions'が空であるものと見なされる(あとで書く)。
str[3]
のように書くことで、文字列のnバイト目を取り出すことができる(長さ1の文字列が返る)。 インデックスは0 origin。
'this apple is \100'
のように、文字列リテラルにシングルクオートを使うこともできる。シングルクオート の中では、「\n」などの円記号が効かない。
変数
代入は
let p = 1
のようにletを用いて行う。
関数の引数を参照したいときは、
function s:QuoteString(str) return "`" . a:str . "'" endfunction
のように「a:」を頭に付ける必要がある。 同様に、グローバル変数を参照する際は「g:」を付ける。
トップレベルの何も付いてない変数はグローバル変数と見なされる。 スクリプトローカルな変数には「s:」を、 カレントバッファにローカルな変数には「b:」を、 ウィンドウローカルな変数には「w:」を付ける。 Vimの定義済み変数には「v:」が付いている(v:versionとか)。
関数
関数名は大文字で始めなければいけない。
可変長引数あり。関数定義はネスト可能。 同名の関数がすでに存在するとエラーになる(function! を使えばエラーにならない)。
exe(execute)を使うといわゆるevalっぽいことも可能。
制御構文
let a = 1 if a == 1 echo "one" elseif a == 2 echo "two" else echo "many" endif while p < 10 let p=p+1 echo p endwhile
break、continue、三項演算子(a?b:c)もあり。 echoはステータスラインに文字列を表示する。 echonを使うと改行しない。
関数一覧
リモート
remote_expr( {server}, {string} [, {idvar}]) String send expression remote_foreground( {server}) Number bring Vim server to the foreground remote_peek( {serverid} [, {retvar}]) Number check for reply string remote_read( {serverid}) String read reply string remote_send( {server}, {string} [, {idvar}]) String send key sequence server2client( {clientid}, {string}) Number send reply string serverlist() String get a list of available servers
変数
exists( {expr}) Number TRUE if {expr} exists type( {name}) Number type of variable {name}
文字列操作
char2nr( {expr}) Number ASCII value of first char in {expr} escape( {string}, {chars}) String escape {chars} in {string} with '\' iconv( {expr}, {from}, {to}) String convert encoding of {expr} match( {expr}, {pat}[, {start}]) Number position where {pat} matches in {expr} matchend( {expr}, {pat}[, {start}]) Number position where {pat} ends in {expr} matchstr( {expr}, {pat}[, {start}]) String match of {pat} in {expr} nr2char( {expr}) String single char with ASCII value {expr} simplify( {filename}) String simplify filename as much as possible stridx( {haystack}, {needle}) Number first index of {needle} in {haystack} strlen( {expr}) Number length of the String {expr} strpart( {src}, {start}[, {len}]) String {len} characters of {src} at {start} strridx( {haystack}, {needle}) Number last index of {needle} in {haystack} strtrans( {expr}) String translate string to make it printable submatch( {nr}) String specific match in ":substitute" substitute( {expr}, {pat}, {sub}, {flags}) String all {pat} in {expr} replaced with {sub} tolower( {expr}) String the String {expr} switched to lowercase toupper( {expr}) String the String {expr} switched to uppercase
編集
mode() String current editing mode search( {pattern} [, {flags}]) Number search for {pattern} searchpair( {start}, {middle}, {end} [, {flags} [, {skip}]]) Number search for other end of start/end pair
時刻
strftime( {format}[, {time}]) String time in specified format localtime() Number current time
バッファ編集(get)
byte2line( {byte}) Number line number at byte count {byte} cindent( {lnum}) Number C indent for line {lnum} col( {expr}) Number column nr of cursor or mark cursor( {lnum}, {col}) Number position cursor at {lnum}, {col} foldclosed( {lnum}) Number first line of fold at {lnum} if closed foldclosedend( {lnum}) Number last line of fold at {lnum} if closed foldlevel( {lnum}) Number fold level at {lnum} foldtext( ) String line displayed for closed fold getbufvar( {expr}, {varname}) variable {varname} in buffer {expr} getline( {lnum}) String line {lnum} from current buffer line( {expr}) Number line nr of cursor, last line or mark line2byte( {lnum}) Number byte count of line {lnum} lispindent( {lnum}) Number Lisp indent for line {lnum} nextnonblank( {lnum}) Number line nr of non-blank line >= {lnum} prevnonblank( {lnum}) Number line nr of non-blank line <= {lnum} virtcol( {expr}) Number screen column of cursor or mark visualmode( [expr]) String last visual mode used
バッファ編集(set)
append( {lnum}, {string}) Number append {string} below line {lnum} setline( {lnum}, {line}) Number set line {lnum} to {line} setbufvar( {expr}, {varname}, {val}) set {varname} in buffer {expr} to {val}
バッファ管理
bufexists( {expr}) Number TRUE if buffer {expr} exists buflisted( {expr}) Number TRUE if buffer {expr} is listed bufloaded( {expr}) Number TRUE if buffer {expr} is loaded bufname( {expr}) String Name of the buffer {expr} bufnr( {expr}) Number Number of the buffer {expr} bufwinnr( {expr}) Number window number of buffer {expr}
コマンドライン
getcmdline() String return the current command-line getcmdpos() Number return cursor position in command-line setcmdpos( {pos}) Number set cursor position in command-line
ファイル
delete( {fname}) Number delete file {fname} filereadable( {file}) Number TRUE if {file} is a readable file filewritable( {file}) Number TRUE if {file} is a writable file fnamemodify( {fname}, {mods}) String modify file name getfsize( {fname}) Number size in bytes of file getftime( {fname}) Number last modification time of file rename( {from}, {to}) Number rename (move) file from {from} to {to} tempname() String name for a temporary file
ディレクトリ
getcwd() String the current working directory glob( {expr}) String expand file wildcards in {expr} globpath( {path}, {expr}) String do glob({expr}) for all dirs in {path} isdirectory( {directory}) Number TRUE if {directory} is a directory resolve( {filename}) String get filename a shortcut points to
レジスタ
getreg( [{regname}]) String contents of register getregtype( [{regname}]) String type of register setreg( {n}, {v}[, {opt}]) Number set register to value and type
ヒストリ
histadd( {history},{item}) String add an item to a history histdel( {history} [, {item}]) String remove an item from a history histget( {history} [, {index}]) String get the item {index} from a history histnr( {history}) Number highest index of a history
ユーザーインターフェイス
browse( {save}, {title}, {initdir}, {default}) String put up a file requester confirm( {msg} [, {choices} [, {default} [, {type}]]]) Number number of choice picked by user getchar( [expr]) Number get one character from the user getcharmod( ) Number modifiers for the last typed character input( {prompt} [, {text}]) String get input from the user inputdialog( {p} [, {t} [, {c}]]) String like input() but in a GUI dialog inputsecret( {prompt} [, {text}]) String like input() but hiding the text
システム
foreground( ) Number bring the Vim window to the foreground hostname() String name of the machine Vim is running on system( {expr}) String output of shell command {expr}
!!シンタックスハイライト hlexists( {name}) Number TRUE if highlight group {name} exists hlID( {name}) Number syntax ID of highlight group {name}
ウィンドウ
getwinposx() Number X coord in pixels of GUI Vim window getwinposy() Number Y coord in pixels of GUI Vim window getwinvar( {nr}, {varname}) variable {varname} in window {nr} winbufnr( {nr}) Number buffer number of window {nr} wincol() Number window column of the cursor winheight( {nr}) Number height of window {nr} winline() Number window line of the cursor winnr() Number number of current window winrestcmd() String returns command to restore window sizes winwidth( {nr}) Number width of window {nr} setwinvar( {nr}, {varname}, {val}) set {varname} in window {nr} to {val}
ARGS
argc() Number number of files in the argument list argidx() Number current index in the argument list argv( {nr}) String {nr} entry of the argument list
---------
cscope_connection( [{num} , {dbpath} [, {prepend}]]) Number checks existence of cscope connection did_filetype() Number TRUE if FileType autocommand event used eventhandler( ) Number TRUE if inside an event handler executable( {expr}) Number 1 if executable {expr} exists expand( {expr}) String expand special keywords in {expr} has( {feature}) Number TRUE if feature {feature} supported hasmapto( {what} [, {mode}]) Number TRUE if mapping to {what} exists indent( {lnum}) Number indent of line {lnum} inputrestore() Number restore typeahead inputsave() Number save and clear typeahead libcall( {lib}, {func}, {arg}) String call {func} in library {lib} with {arg} libcallnr( {lib}, {func}, {arg}) Number idem, but return a Number maparg( {name}[, {mode}]) String rhs of mapping {name} in mode {mode} mapcheck( {name}[, {mode}]) String check for mappings matching {name} synID( {line}, {col}, {trans}) Number syntax ID at {line} and {col} synIDattr( {synID}, {what} [, {mode}]) String attribute {what} of syntax ID {synID} synIDtrans( {synID}) Number translated syntax ID of {synID}
View on github | Report issue