:map引数なしでコマンドを実行すると、ユーザー定義のマッピングのリストが表示されるはずですが、たとえば、Ctrl-Wを押すとCtrl-Iが発生しますが、組み込みマッピングとしてどのような機能が発生したのかわかりません:mapコマンドには表示されません。
キーの機能を調べるにはどうすればよいですか?
:help CTRL-W_CTRL-Iまたは:help CTRL-W_i
:map引数なしでコマンドを実行すると、ユーザー定義のマッピングのリストが表示されるはずですが、たとえば、Ctrl-Wを押すとCtrl-Iが発生しますが、組み込みマッピングとしてどのような機能が発生したのかわかりません:mapコマンドには表示されません。
キーの機能を調べるにはどうすればよいですか?
:help CTRL-W_CTRL-Iまたは:help CTRL-W_i
回答:
できません。
以下に、Cソースコードの内容を示し<C-w><C-i>ます。
normal.c:
/*
* This table contains one entry for every Normal or Visual mode command.
* The order doesn't matter, init_normal_cmds() will create a sorted index.
* It is faster when all keys from zero to '~' are present.
*/
static const struct nv_cmd
{
int cmd_char; /* (first) command character */
nv_func_T cmd_func; /* function for this command */
short_u cmd_flags; /* NV_ flags */
short cmd_arg; /* value for ca.arg */
} nv_cmds[] =
{
[...]
{Ctrl_W, nv_window, 0, 0},
};
[...]
/*
* CTRL-W: Window commands
*/
static void
nv_window(cmdarg_T *cap)
{
if (!checkclearop(cap->oap))
do_window(cap->nchar, cap->count0, NUL); /* everything is in window.c */
}
window.c:
/*
* all CTRL-W window commands are handled here, called from normal_cmd().
*/
void
do_window(
[..]
) {
switch (nchar)
{
[..]
case 'i': /* Go to any match */
case Ctrl_I:
type = FIND_ANY;
/* FALLTHROUGH */
[..]
default: beep_flush();
break;
type変数がどこで取得されるのか完全にはわかりませんが、それを調べる気はありませんでしたが、ポイントは「このキーはこの機能にマップされている」と言う本当の機能がないということです。これは基本的にa structをchar関数にマップするだけであり、2番目のキーストローク(<C-i>)の実装はアドホックなさです!
これはEmacsとは異なります。Emacsでは(すべて)Lispにあり、カスタムマッピングはEmacsのデフォルトマッピングと変わりません。しかし、Vimには、Vimで決して公開されないC関数に対してマップするCコードによって提供される「マジック」マッピングがあります。私はいつも、Vimにはもっと良いアイデアがあると言いますが、Emacsにはもっと良い実装があります;-)
そのため、唯一の方法はヘルプファイルで調べることです。これが、Vimのドキュメントのトピックに移動する方法の複製としてこれを閉じた理由です。なぜなら、それが誰でも与えることができる唯一の実用的な答えだからです。一つは、実際に(私が行ったように)質問へのより詳細な説明が与えられることができることを主張することができ、あなたは主張していたことを、代わりに(今-削除)応答を与える、私はおそらく「」あなたに言っただろう間違いなくごめんなさい」と再度開きました;-)
とにかく、いくつかの例を使って規則を簡単に説明します。
:help w- w(大文字と小文字を区別する)の通常モードのマッピング。:help g8-の通常モードのマッピングg8。:help v_o−のビジュアルモードマッピングo。他のモードはc、コマンドラインi用と挿入用です。:help CTRL-W-の通常モードのマッピング<C-w>。:help i_CTRL-W-のモードマッピングを挿入します<C-w>。:help CTRL-W_CTRL-I-の通常モードのマッピング<C-w><C-i>。:help i_CTRL-G_<Down>-のモードマッピングを挿入します<C-g><Down>。commandline completionCTRL-Dを使用してvim helpで呼び出されるものです(「ヘルプを検索」と呼びます)。入力して:h CTRL-Wから<CTRL-D>を押すと、文字列「CTRL-W」を含むすべてのコマンドのリストが表示されますCTRL-W, CTRL-W_^, CTRL-W-<Down>, ...。入力し:h g8<CTRL-D>、あなたが表示されますg8と、8g8使用可能なヘルプ対象として。これがないと、ヘルプの件名を正確に入力する必要があり、動作する正確な文字列を見つけることは困難です。
次のvimヘルプファイルにあります。 :help index
デフォルトでマッピングされていないキーを知りたい場合は、
:help map-which-keys
注:上記は最新のvimリファレンスマニュアルへのクリック可能なリンクです。