Vimではヒットすることができます Shift-k カーソルの下にある文字列のマニュアルを開きます。
この方法でBashを構成することもできますか(set -o vi
を使用する場合)?
例えば:
# '|' represents the position of a cursor.
$ |
# Write a command.
$ grep things *|
# Hit 'esc' to enter normal mode.
# Hit '3b' to move to 'grep'.
$ |grep things *
# Now I would like to hit 'Shift-k' to open 'man grep'.
bind -x
を使用してbash関数をキーにバインドできます。この関数では、変数 READLINE_LINE
および READLINE_POINT
を介して入力バッファーの現在の内容にアクセスできます。
run_man () {
declare prefix="${READLINE_LINE:0:$READLINE_POINT}" suffix="${READLINE_LINE:$READLINE_POINT}"
declare Word="${prefix##*[!-+.0-9A-Z_a-z]}${suffix%%[!-+.0-9A-Z_a-z]*}"
man "$Word"
}
bind -m vi -x '"K": run_man'
カーソルの下のWordよりもコマンド位置にあるWordのマニュアルページを開く方が便利な場合がありますが、これにはより複雑な解析が必要です。 bash-completionコードがその助けになるかもしれません。または、行の最初のWordを選択することもできます。これにより、現在のWordを取得するよりも解析が少なくて済みます。
Bashビルトインを検出し、manページの代わりにbashドキュメントを表示するには、 ユニバーサルヘルプ/ manコマンド:helpビルトイン部分一致 を参照してください。
P.S.
プロンプトからコマンド全体を削除せずに男性を見ることができるのは素晴らしいことです。
これはzshで頻繁に行います 。 bashでも可能だと思いますが、設定はもっと複雑です。
history Expansion を使用して、最後に指定したコマンドのコマンド名を参照します。
$ grep something
$ man !:0
履歴の展開はbeforeエイリアスの展開で行われるため、エイリアスを使用する場合は、次のようにする必要があります。
alias k='man "$(history -p \!:0)"'
次に、k
と入力して、最後に実行されたコマンドのマニュアルページを確認します。
これは標準的な操作ではありませんが、かなり簡単に追加できます。 この回答(リンク) を参照してください。
readline
のソースコード を読みましたが、必要な機能を追加することはかなり実行可能のようです。 readline
はすでにv
オプションをサポートしており、編集モードに入り、$EDITOR
を開くことができます。 readline
が$EDITOR
を開く方法のロジックを分析すると、カーソルの下にあるWordを引数としてman
を開くのは非常に簡単です。
ここにいくつかの興味深いgrepsがあります:
grep -RI EDITOR *
doc/hsuser.texi:is used: @code{$@{FCEDIT:-$@{EDITOR:-vi@}@}}. This says to use the
doc/hsuser.texi:@env{EDITOR} variable if that is set, or @code{vi} if neither is set.
doc/rluser.texi:@code{$VISUAL}, @code{$EDITOR}, and @code{emacs}
examples/rlfe/ChangeLog: * line options; use EDITOR/VISUAL to set vi/emacs preference.
examples/rlfe/README:but if the the environment variable EDITOR is set to "vi" that
examples/rlfe/rlfe.c: * line options; use EDITOR/VISUAL to set vi/emacs preference.
examples/rlfe/rlfe.c: if (getenv ("EDITOR") != 0)
examples/rlfe/rlfe.c: vi |= strcmp (getenv ("EDITOR"), "vi") == 0;
grep -RI -C 5 editing-mode *.c
bind.c- { "bell-style", V_STRING, sv_bell_style },
bind.c- { "comment-begin", V_STRING, sv_combegin },
bind.c- { "completion-display-width", V_INT, sv_compwidth },
bind.c- { "completion-prefix-display-length", V_INT, sv_dispprefix },
bind.c- { "completion-query-items", V_INT, sv_compquery },
bind.c: { "editing-mode", V_STRING, sv_editmode },
bind.c- { "emacs-mode-string", V_STRING, sv_emacs_modestr },
bind.c- { "history-size", V_INT, sv_histsize },
bind.c- { "isearch-terminators", V_STRING, sv_isrchterm },
bind.c- { "keymap", V_STRING, sv_keymap },
bind.c- { "keyseq-timeout", V_INT, sv_seqtimeout },
--
--
bind.c- else if (_rl_stricmp (name, "completion-query-items") == 0)
bind.c- {
bind.c- sprintf (numbuf, "%d", rl_completion_query_items);
bind.c- return (numbuf);
bind.c- }
bind.c: else if (_rl_stricmp (name, "editing-mode") == 0)
bind.c- return (rl_get_keymap_name_from_edit_mode ());
bind.c- else if (_rl_stricmp (name, "history-size") == 0)
bind.c- {
bind.c- sprintf (numbuf, "%d", history_is_stifled() ? history_max_entries : 0);
bind.c- return (numbuf);
--
--
funmap.c- { "do-lowercase-version", rl_do_lowercase_version },
funmap.c- { "downcase-Word", rl_downcase_Word },
funmap.c- { "dump-functions", rl_dump_functions },
funmap.c- { "dump-macros", rl_dump_macros },
funmap.c- { "dump-variables", rl_dump_variables },
funmap.c: { "emacs-editing-mode", rl_emacs_editing_mode },
funmap.c- { "end-kbd-macro", rl_end_kbd_macro },
funmap.c- { "end-of-history", rl_end_of_history },
funmap.c- { "end-of-line", rl_end_of_line },
funmap.c- { "exchange-point-and-mark", rl_exchange_point_and_mark },
funmap.c- { "forward-backward-delete-char", rl_rubout_or_delete },
--
--
funmap.c- { "vi-column", rl_vi_column },
funmap.c- { "vi-complete", rl_vi_complete },
funmap.c- { "vi-delete", rl_vi_delete },
funmap.c- { "vi-delete-to", rl_vi_delete_to },
funmap.c- { "vi-eWord", rl_vi_eWord },
funmap.c: { "vi-editing-mode", rl_vi_editing_mode },
funmap.c- { "vi-end-bigword", rl_vi_eWord },
funmap.c- { "vi-end-Word", rl_vi_end_Word },
funmap.c- { "vi-eof-maybe", rl_vi_eof_maybe },
funmap.c- { "vi-eword", rl_vi_eword },
funmap.c- { "vi-fWord", rl_vi_fWord },