GitHub

VimScriptMemo

Vim Script(vim6)に関する自分用のメモです。

参考資料

help eval もしくは http
//www.kaoriya.net/vimdoc_j/ の eval.txtやusr_41.txt

以下の記述はVim 6に対してのものです。Vim 7ではいろいろ機能が追加されている模様。

{{toc_here}}

変数

変数は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}
source: VimScriptMemo.hd
View on github | Report issue