Как я могу настроить Bash, Zsh или Tmux для завершения последнего идентификатора соответствия на экране ? Рассмотрим этот общий сценарий:
$ git fetch
remote: Counting objects: 16, done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 9 (delta 4), reused 0 (delta 0)
Unpacking objects: 100% (9/9), done.
From /opt/git/thunder
* [new branch] issue540 -> origin/issue547314
e9204cf..4d42c3f v2.1 -> origin/v2.1
Как я могу заставить Bash / Zsh / Tmux issue547
легко выполнить CLI? Когда я нажимаю Tabпосле того, как $ git checkout is
Git завершает работу issue
, но я должен завершить цифры самостоятельно, потому что все предыдущие цифры действительно соответствуют существующим ветвям Git .
В VIM нажатие Ctrl+ Pдля omnicomplete завершится, как и предыдущий матч, поэтому в этом случае issue547314
фактически будет завершено. Как я могу получить это поведение в Bash, Zsh или Tmux ?
В настоящее время я использую Bash 4.2 и Tmux 1.10 на Ubuntu Server (обычно 12.04 LTS). Я могу обновить до последней версии Ubuntu Server LTS (14.04), если это необходимо.
РЕДАКТИРОВАТЬ : Я не возражаю против любого решения, которое использует Bash, Zsh или Tmux, если его не сложно использовать. Так Tabили Ctrl+ Pили какой - либо другой такой ярлык будет хорошо, но не Alt+ Meta+ Super+ Shift+ א.
Ответы:
Я думаю, что функция, которую ищет OP, в мире Emacs называется dabbrev-expand :
xterm
также имеетdabbrev-expand
функцию, но она немного менее умна, чем аналог Emacs, но это очень полезно для меня, и одна из причин, по которой я переключилсяxterm
. Внутриxterm
окна можно использовать пользовательскую привязку клавиш, указанную в,~/.Xresources
для вызоваdabbrev-expand
данной строки. Например, у меня есть следующая запись в моем~/.Xresources
(я используюuxterm
Unicode-версию xterm):Внутри
xterm
окна я могу использоватьM-/
(ALT + /
) для вызоваdabbrev-expand
.xterm
будет искать все строки, видимые на экране, которые начинаются с букв, которые я набрал. Пример:Если бы я нажал
M-/
сейчасxterm
, расширился быa_v
доa_very_long_string
. К сожалению, как я уже сказал,xterm
он не такой умный, и егоdabbrev-expand
функция будет работать только на полных строках. Таким образом, в вашем случаеis
это будет расширено,issue540
а неissue547314
потому, чтоissue547314
оно является частьюorigin/issue547314
(представьте себе, как\b
в регулярных выражениях, это немного похоже, хотя большинство движков регулярных выражений будет отлавливать оба появленияissue
строк в\bissue.+\b
). Но вы можете напечататьor
и затем нажатьM-/
.xterm
сначала расширимсяor
доorigin/v2.1
, это не то, что мы хотим, поэтому нажмите ещеM-/
раз иxterm
расширим его доorigin/issue547314
. Теперь, если вы используете Bash, вы можете сделатьM-b
,C-w
иC-e
удалитьorigin/
часть. Подводя итог, можно сказать , чтоdabbrev-expand
внутренняя частьxterm
не так хороша, как в Emacs (и, думаю, Vim), но все же быстрее, чем переписывать длинные строки вручную и менее подвержена опечаткам. И в большинстве случаев он будет расширяться непосредственно до нужной строки без необходимости удалять лишние части. Вам просто нужно к этому привыкнуть - посмотрите на строку, которую вы хотите иметь в курсоре, и посмотрите, не предшествует ли ей что-то еще, и если она набирает предыдущую часть и удалите ее после раскрытия.Обратите внимание, что по умолчанию функция
xterm
не компилируетсяdabbrev-expand
, и вы должны включить ее явно. Тем не менее, версияxterm
в репозиториях Ubuntu скомпилирована,dabbrev-expand
и вы можете использовать ее прямо сейчас.источник
xterm
иuxterm
не скомпилированы для dabbrev-расширить, я не мог найти упоминание о функции в-help
. Как я могу увидеть флаги компиляции (как сvim --version
)? Обратите внимание, что я также попробовал строку конфигурации,~/.Xresources
какMeta <KeyPress> /: dabbrev-expand() \n\
показано здесь, но это тоже не помогло.xrdb -merge .Xresources
в xterm.zsh
, есть эта возможность.Bash, как похожее средство, называется bash complete. Вы можете использовать его, нажимая Tabклавишу при предоставлении аргументов командам, когда вы их набираете.
пример
Если я начну с того, что наберу,
ls
а затем нажму Tabдважды, вы получите Bash для предоставления списка соответствующих файлов (и параметров командной строки) для любой команды, которую вы пытаетесь использовать:А вот пример с переключателями:
Настроить?
Моя установка уже включала правило для
git
:Установка этого файла была сделана, когда я установил
git
пакет. Я на Fedora 19, но другие дистрибутивы тоже должны это делать.Глядя на файл правил, он объясняет, что он облегчит автозаполнение в следующих ситуациях:
Так что это должно "просто работать" для вас.
источник
Вы можете сделать что-то подобное с помощью extrakto :
prefix + tab
чтобы запустить extraktotab
вставить его в текущую панель,enter
скопировать его в буфер обмена,ctrl-o
открыть путь / URL илиctrl-e
редактировать с$EDITOR
источник