Intereting Posts
Ошибка в apt-get для Linux Mint Qiana Где мое свободное пространство ушло после сокращения раздела? tcpdump – DNS-логгер в реальном времени с конвейером ошибка device-mapper при настройке dm-cache Пользовательское приветствие при входе в систему через ssh Избегайте обновления CentOS 7 через yum? Как автоматически загружать новый VID и PID в модуль usb_serial Какая лучшая цепочка инструментов или единственный инструмент для преобразования NTFS в файловую систему ext ? Перенос ключей для рабочих областей в Xmonad Избегайте «Ошибка манипулирования токенами аутентификации» при смене пароля «Ошибка северного моста (узел 0): ошибка ECC в каталоге фильтра зондов" Как я могу запустить этот скрипт bash параллельно? md5 Строка и файл разные Как создать команду bash, которая создает вывод, который точно имитирует исходный текстовый файл, который можно вставить в оболочку bash, где включен histexpand? Добавление новых пользователей из сеанса терминала

Можно ли нажать Shift-k и открыть руководство для команды в Bash?

В 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'. 

Вы можете привязать функцию 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 вместо man-страницы, см. Универсальную команду help / man: help builtin partial matches

PS

Было бы неплохо видеть человека без удаления всей команды из приглашения.

Я часто это делаю в zsh . Я ожидаю, что это возможно и в bash, но сложнее настроить.

Просто используйте расширение истории, чтобы ссылаться на имя команды последней приведенной команды.

 $ grep something $ man !:0 

Поскольку расширение истории выполняется до расширения псевдонима, если вы хотите использовать псевдоним, вы должны сделать это так:

 alias k='man "$(history -p \!:0)"' 

Затем просто введите k чтобы посмотреть man-страницу последней выполненной команды.

ТЛ; др

Это не стандартная операция, но вы можете добавить ее довольно легко. См. Этот ответ (ссылка) .

Если вы все еще готовы взломать исходный код …

Я прочитал исходный код readline и похоже, что можно добавить желаемую функциональность. readline уже поддерживает опцию v которая позволяет вам войти в режим редактирования и открыть свой $EDITOR . Если проанализировать логику того, как readline открывает $EDITOR тогда должно быть довольно легко открыть 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 },