Skip to content

Commit b157d4b

Browse files
authored
Merge pull request #1118 from tsuyoshicho/update/20220623/usrx
Update usr_{41,50,51,52,toc}.{txt,jax}
2 parents 2e782ba + 4ad73d7 commit b157d4b

File tree

10 files changed

+1467
-1414
lines changed

10 files changed

+1467
-1414
lines changed

doc/usr_41.jax

Lines changed: 228 additions & 294 deletions
Large diffs are not rendered by default.

doc/usr_50.jax

Lines changed: 110 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,126 @@
1-
*usr_50.txt* For Vim バージョン 9.0. Last change: 2022 May 13
1+
*usr_50.txt* For Vim バージョン 9.0. Last change: 2022 Jun 20
22

33
VIM USER MANUAL - by Bram Moolenaar
44

55
高度な Vim script の書き方
66

77

8-
TODO - この章はいずれ書きます
9-
10-
|50.1| 執筆活動
8+
|50.1| 例外
9+
|50.2| 可変長引数の関数
10+
|50.3| ビューの復元
1111

1212
次章: |usr_51.txt| プラグインを作る
1313
前章: |usr_45.txt| 言語を選択する (ロケール)
1414
目次: |usr_toc.txt|
1515

1616
==============================================================================
17-
*50.1* 執筆活動
17+
*50.1* 例外
18+
19+
まずは例から始めましょう: >
20+
21+
try
22+
read ~/templates/pascal.tmpl
23+
catch /E484:/
24+
echo "パスカル用のテンプレートファイルは見つかりませんでした。"
25+
endtry
26+
27+
`read` コマンドはファイルがなければ失敗します。そのエラーをキャッチして、エラー
28+
メッセージの代わりにより詳細な情報のメッセージを表示しています。
29+
30+
`try``endtry` の間で起きたエラーは例外に変換されます。例外は文字列です。エ
31+
ラーの場合、文字列はエラーメッセージを含んでいます。そして、全てのエラーメッ
32+
セージは番号を持っています。この場合、キャッチしたエラーには "E484:" が含まれ
33+
ています。この番号は変わらないことが保証されています (テキストは翻訳されるなど
34+
して変わる可能性があります)。
35+
36+
素敵なエラーメッセージを出力し、Vim は `:endtry` 以降のコマンドの実行も続けま
37+
す。それ以外のキャッチされないエラーに遭遇した場合、スクリプト/関数/マッピング
38+
の実行は中断されます。
39+
40+
`read` コマンドが他のエラーを起こした場合、"E484:" というパターンはマッチしな
41+
いでしょう。したがって、その例外はキャッチされず、通常のエラーメッセージの表示
42+
とともに実行が中断されます。
43+
44+
あなたはこれをしたくなるかもしれません: >
45+
46+
try
47+
read ~/templates/pascal.tmpl
48+
catch
49+
echo "パスカル用のテンプレートファイルは見つかりませんでした。"
50+
endtry
51+
52+
全ての例外がキャッチされます。しかし "E21: Cannot make changes, 'modifiable'
53+
is off" のようなまったく異なる問題を示す有効なエラーに気づくことができません。
54+
エラーをキャッチする前によく考えてください!
55+
56+
もう1つの便利なメカニズムは `finally` コマンドです: >
57+
58+
var tmp = tempname()
59+
try
60+
exe ":.,$write " .. tmp
61+
exe "!filter " .. tmp
62+
:.,$delete
63+
exe ":$read " .. tmp
64+
finally
65+
delete(tmp)
66+
endtry
67+
68+
これは、ファイル名の引数をとる "filter" コマンドを使用して、カーソルからファイ
69+
ルの終わりまでの行をフィルタリングします。フィルタリングが動作しても、`try`
70+
`finally` の間で何か問題が発生した場合や、ユーザーが CTRL-C を押してフィルタリ
71+
ングをキャンセルした場合は、常に `delete(tmp)` 呼び出しが実行されます。これに
72+
より、一時ファイルを残さないようにすることができます。
73+
74+
`finally` は例外をキャッチせず、エラーはそれ以降の実行を中断します。
75+
76+
例外についてさらに詳しい情報はリファレンスマニュアルの|exception-handling|
77+
参照してください。
78+
79+
==============================================================================
80+
*50.2* 可変長引数の関数
81+
82+
Vim では、可変数の引数を持つ関数を定義できます。例えば、次のコマンドは、1つの
83+
引数(start)を持つ必要があり、最大20個の追加の引数を持つことができる関数を定義
84+
します: >
85+
86+
def Show(start: string, ...items: list<string>)
87+
88+
変数 "items" は、追加の引数を含む関数内のリストになります。any型のリストと同じ
89+
ように使用できます。例: >
90+
91+
def Show(start: string, ...items: list<string>)
92+
echohl Title
93+
echo "start is " .. start
94+
echohl None
95+
for index in range(len(items))
96+
echon $" Arg {index} is {items[index]}"
97+
endfor
98+
echo
99+
enddef
100+
101+
このように呼び出しできます: >
102+
103+
Show('Title', 'one', 'two', 'three')
104+
< start is Title Arg 0 is one Arg 1 is two Arg 2 is three ~
105+
106+
これは `echohl` コマンドを使用して以降の `echo` コマンドをハイライトするように
107+
指定しています。`echohl None` で再度停止します。`echon` コマンドは `echo` と同
108+
様に動作しますが、改行を出力しません。
109+
110+
引数を1つで呼び出したときは "items" リストは空になります。`range(len(items))`
111+
はインデックス付きのリストを返します。`for` がループするものについては、さらに
112+
詳しく説明します。
113+
114+
==============================================================================
115+
*50.3* ビューの復元
116+
117+
場合によっては、ジャンプして変更を加えてから、同じ位置とビューに戻りたいことが
118+
あります。例えば、ファイルヘッダーの何かを変更します。これは、次の 2 つの関数
119+
で実行できます: >
18120
19-
TODO
121+
var view = winsaveview()
122+
# 移動して、変更を行う
123+
winrestview(view)
20124
21125
==============================================================================
22126

0 commit comments

Comments
 (0)