VimScriptスクリプト言語学習------よく使われる内蔵関数---(String操作)


1プラットフォームAPIの重要性
どの言語でも本当に役に立つプログラムを書くには、プラットフォームAPIの呼び出しが欠かせません.C/C++を使用してWindowsプログラムを開発するにはWin 32 APIを大量に呼び出す必要があり、Linuxプログラムを開発するにはLinux APIを大量に呼び出す必要があり、Javaプログラムを開発するにはJavaパッケージを使用したプラットフォームAPIを呼び出す必要がある.APIは大きく2種類に分けられ、1つは関数の形式で体現され、例えばWin 32 API、Linux API、Socket APIなどであり、もう1つはクラスの形式で体現され、オブジェクト向けの言語で使用される.PHPのプラットフォームライブラリには関数もクラスもあるなど、ハイブリッドもあります.
VimScriptの場合、その下位プラットフォームはvimであり、APIの形式は関数ライブラリである.vim 7.3バージョンでは、ユーザーが使用できる300近くの組み込み関数が提供されています.vimを簡単に操作するには、よく使われる組み込み関数を熟練しなければなりません.内蔵関数と同じ機能を繰り返し実現しないでください.内蔵関数はCで作成されたコンパイルされたバイナリコードであり、VimScriptで作成された関数よりも実行速度がはるかに高いからです.
2 Vimプラットフォーム内蔵API分類紹介
vimが提供する300近くの組み込み関数は,機能的にいくつかの大きなクラスに分けることができる.
2.1文字列操作クラス
(1)nr2char({expr})
number to char.ASCIIコードの値(整数)に対応する文字列を返します.
(2)char2nr({expr})
char to number.文字列の頭文字のASCIIコード値を返します.
(3)str2nr( {expr} [, {base}] )
string to number.1つの文字列を整数に変換し、パラメータbaseは進数であり、8,10,16であってもよい.baseパラメータが指定されていない場合は、デフォルトでは10進数で変換されます.これは、文字列から整数への自動変換とは異なります.自動変換は、文字列の接頭辞に基づいて進数を自動的に判別します.
(4)str2float( {expr} )
string to float.文字列を浮動小数点数に変換します.
(5)printf( {fmt}, {expr1} ...)
フォーマットし、印刷ではなくフォーマットされた文字列を返します.Cバージョンのprintfと似ていますが、この関数は印刷されず、フォーマットされた文字列を返します.
以下に、試験例を示す.
echo nr2char(65)
echo char2nr('ABC')
echo str2nr('0x12', 16)
echo str2nr('0x12')
echo str2float('23.2221')
echo printf('%d, %s, %f', 10, '  ', 98.3)

結果:
A
65
18
0
23.2221
10,   , 98.300000
(6)escape( {string}, {chars} )
stringにcharsのいずれかの文字が存在する場合は、を使用してこの文字をエスケープし、処理した文字列を返します.
(7)shellescape( {string}, [, {special}] )
stringに表示される特殊文字を、オペレーティングシステムshellの要件を満たすフォーマットに変換します.
(8)fnameescape( {string} )
指定したファイル名stringをエスケープし、主に中の%などvimで特殊文字の文字をエスケープします.
(9)tr( {src}, {fromstr}, {tostr} )
srcに表示されるformstrの文字を、位置対応関係でtostrの文字に置き換えます.
(10)strtrans( {expr} )
文字列の印刷不可文字を印刷可能文字に変換して返します.
(11)tolower( {expr} )
大文字を小文字に変換する.
(12)toupper( {expr} )
小文字を大文字に変換する.
次のテストを行います.
let str = "Hello, VimScript!"
echo tolower(str)
echo toupper(str)
echo tr(str, 'eo', 'EO')

echo escape(str, 'Vim')
echo shellescape(str)
echo fnameescape('/usr/share/file name.txt')

let str = nr2char(10)  "       
echo  strtrans(str)

実行結果:
hello, vimscript!
HELLO, VIMSCRIPT!
HEllO, VimScript!
Hello, \V\i\mScr\ipt!
'Hello, VimScript!'
/usr/share/file\ name.txt
^@

(13)match( {expr}, {pat}[, {start} [, {count}]] }
一致位置インデックス値を見つけて、この値を返します.{expr}は、Stringであり、一致モードdの最初の文字を開始するインデックスを返します.リストタイプで、各要素はStringであり、一致モードの文字列要素のリスト内のインデックスを返します.一致項目が見つからない場合は、-1を返します.
(14)matchend( {expr}, {pat}[, {start} [, {count}]] }
matchと同様に、一致する開始インデックスではなく、一致する後のインデックスを返すだけです.
(15)matchstr( {expr}, {pat}[, {start} [, {count}]] }
matchと同じですが、一致する文字列を返します.一致しない場合は空の文字列を返します.
(16)matchlist( {expr}, {pat}[, {start} [, {count}]] }
matchstrと同様に、リストが返されるだけで、最初の要素は一致する文字列であり、後のd要素は一致するサブ列であり、例えば「1」、「2」である.(正規表現の逆参照)
この4つの関数は正規表現のサポートです.次に例を示します.
let str = "Hello, VimScript!"
let pat = 'V\(.\)m'
echo match(str, pat)
echo matchend(str, pat)
echo matchstr(str, pat)
echo matchlist(str, pat)

実行結果:
7
10
Vim
['Vim', 'i', '', '', '', '', '', '', '', '']

(17)stridx( {haystack}, {needle} [, {start}] )
最初に一致するサブストリングを検索し、文字列の痩せたサブインデックスを返します.C#のString.IndexOf()と似ています.
(18)strridex( {haystack}, {needle} [, {start}] )
最初に一致する文字列を逆方向に検索します.
(19)strlen( {expr} )
指定した文字列の長さをバイト単位で返します.
(20)substitute( {expr}, {pat}, {sub}, {flags})
コマンド:substituteと同様に文字列を置換します.
(21)submatch( {nr} )
サブマッチング.正規表現の逆参照に相当します.substituteコマンドのパラメータでのみ使用できます.
(22)strpart( {src}, {start} [, {len}] )
文字列のサブストリングを返します.他の言語のsubstr()に似ています.
これらの関数は、次のような基本的な文字列操作関数です.
let str = "Hello, VimScript!"
echo stridx(str, 'i')
echo strridx(str, 'i')
echo strlen(str)
echo substitute(str, 'Vim', 'VIM', "")
echo strpart(str, 3, 2)

実行結果:
8
13
17
Hello, VIMScript!
lo

(23)expand( {expr} [, {flag}] )
文字列の特殊なメタ文字を展開して返します.
(24)iconv( {expr}, {from}, {to} )
文字列文字セット変換.UTF-8からlatin 1に変換する.
(25)byteidx( {expr}, {nr})
nr番目の文字の先頭バイトインデックスを返します.単一バイトで符号化されたASCIIの場合、戻り値はnrであり、マルチバイト文字セットにとって価値があります.
(26)repeat( {expr}, {count})
1つの文字列を複数コピーして返します.
これらは文字コードに関連しています.
let str = "%"
echo expand(str)

let str = '  '
echo strlen(str)
echo strlen(iconv(str, 'UTF-8', 'latin1'))

echo byteidx(str, 1)
echo repeat(str, 3)
実行結果:
t4.vim
6
4
3
      

(27)eval( {string} )
1つのデータの記述文字列を、データ自体に変換します.
(28)string( {expr})
データの記述文字列を返します.
この2つの関数は、データのシーケンス化と逆シーケンス化に似ています.
例は次のとおりです.
unlet! v
let str =  string([1,2,3])
let v = eval(str)
echo str
echo type(v)

unlet v
let str = string(2.338)
let v = eval(str)
echo str
echo type(v)

unlet v
let str = string('hello')
let v = eval(str)
echo str
echo type(v)

結果は次のとおりです.
[1, 2, 3]
3
2.338
5
'hello'
1