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'.
답변1
bash 함수를 키에 바인딩할 수 있습니다bind -x
. 이 함수에서는 변수를 통해 입력 버퍼의 현재 내용에 액세스할 수 있습니다.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'
명령 위치에서 단어에 대한 매뉴얼 페이지를 여는 것은 커서 아래에 있는 단어에 대한 매뉴얼 페이지를 여는 것보다 더 유용할 수 있지만, 이렇게 하려면 더 복잡한 구문 분석이 필요합니다. bash 코드 완성이 도움이 될 수 있습니다. 또는 현재 단어를 가져오는 것보다 구문 분석이 덜 필요한 줄의 첫 번째 단어를 선택할 수도 있습니다.
bash 내장 기능을 감지하고 매뉴얼 페이지 대신 bash 문서를 표시하려면 다음을 참조하세요.일반 help/man 명령: 도움말 내장 부분 일치
폴리스티렌
프롬프트에서 전체 명령을 제거하지 않고도 man 을 볼 수 있다면 좋을 것입니다.
나는 종종 zsh에서 이것을한다. Bash에서도 가능했으면 좋겠지만 설정이 더 복잡합니다.
답변2
그냥 사용역사적 확장제공된 마지막 명령을 참조하는 명령 이름입니다.
$ grep something
$ man !:0
역사적 확장이 완료되었기 때문에앞으로별칭 확장, 별칭을 사용하려면 다음을 수행해야 합니다.
alias k='man "$(history -p \!:0)"'
k
그런 다음 실행된 마지막 명령에 대한 매뉴얼 페이지를 보려면 입력하십시오 .
답변3
너무 길어요.
이는 표준 작업은 아니지만 쉽게 추가할 수 있습니다. 바라보다이 답변 (링크).
여전히 소스 코드를 크랙할 의향이 있다면...
나는 읽었다소스 코드readline
필요한 기능을 추가하는 것이 꽤 실현 가능해 보입니다. 여는 방법의 로직을 분석해 보면 커서 아래의 단어를 매개변수로 하여 쉽게 열 수 있도록 readline
지원하고 있습니다 .v
$EDITOR
readline
$EDITOR
man
다음은 몇 가지 흥미로운 grep입니다.
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 },