Como posso configurar o Bash, Zsh ou Tmux para concluir o último identificador correspondente na tela ? Considere este cenário comum:
$ 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
Como posso concluir issue547
com facilidade o Bash / Zsh / Tmux na CLI? Quando pressiono Tabapós o $ git checkout is
Git ser útil para issue
, mas devo completar os dígitos sozinho, porque todos os dígitos anteriores realmente correspondem aos ramos existentes do Git .
No VIM, pressionar Ctrl+ Ppara omnicomplete será concluído como a correspondência anterior, portanto, nesse caso, issue547314
será realmente concluído. Como posso obter esse comportamento no Bash, no Zsh ou no Tmux ?
Atualmente, estou usando o Bash 4.2 e o Tmux 1.10 no Ubuntu Server (geralmente 12.04 LTS). Posso atualizar para o Ubuntu Server LTS mais recente (14.04), se necessário.
Edição : Eu não me importaria com qualquer solução que usa Bash, Zsh ou Tmux, desde que não seja difícil de usar. Então, Tabou Ctrl+ Pou algum outro tal atalho seria bom, mas não Alt+ Meta+ Super+ Shift+ א.
Respostas:
Eu acho que o recurso que o OP está procurando é chamado dabbrev-expand no mundo Emacs:
xterm
também possuidabbrev-expand
recurso, mas é um pouco menos inteligente do que o equivalente do Emacs, mas é muito útil para mim e um dos motivos pelos quais mudeixterm
. Dentro daxterm
janela, pode-se usar uma combinação de teclas personalizada especificada~/.Xresources
para chamardabbrev-expand
uma determinada sequência. Por exemplo, tenho a seguinte entrada no meu~/.Xresources
(eu usouxterm
, uma versão Unicode do xterm):Dentro da
xterm
janela, posso usarM-/
(ALT + /
) para chamardabbrev-expand
.xterm
procurará todas as strings visíveis na tela que começam com as letras que eu digitei. Exemplo:Se eu pressionasse
M-/
agoraxterm
expandiriaa_v
paraa_very_long_string
. Infelizmente, como eu disse,xterm
não é tão inteligente e seudabbrev-expand
recurso funcionará apenas em strings completas. Portanto, no seu caso,is
seria expandido paraissue540
e nãoissue547314
porqueissue547314
é parte deleorigin/issue547314
(pense nisso como\b
em expressões regulares, é um pouco semelhante, embora a maioria dos mecanismos de expressões regulares capte as duas ocorrências deissue
strings\bissue.+\b
). Mas , você pode digitaror
e depois presM-/
.xterm
será expandido primeiroor
paraorigin/v2.1
, não é isso que queremos, então pressioneM-/
novamente exterm
o expanda paraorigin/issue547314
. Agora, se você usa o Bash, pode fazerM-b
,C-w
eC-e
para remover aorigin/
peça. Resumindo, odabbrev-expand
interiorxterm
não é tão bom quanto no Emacs (e no Vim eu acho), mas ainda é mais rápido do que reescrever longas seqüências de caracteres manualmente e menos propenso a erros de digitação. E, na maioria dos casos, ele será expandido diretamente para a sequência desejada, sem a necessidade de remover partes redundantes. Você só precisa se acostumar com isso - observe a string que deseja ter no cursor e veja se ela não é precedida por outra coisa, e se é o tipo de uma peça anterior e remova-a após a expansão.Observe que
xterm
não é compilado com odabbrev-expand
recurso por padrão e você deve habilitá-lo explicitamente. No entanto, a versão dosxterm
repositórios do Ubuntu é compiladadabbrev-expand
e você pode usá-la imediatamente.fonte
xterm
euxterm
não seja compilado para dabbrev-expand, não encontrei nenhuma menção ao recurso-help
. Como posso ver os sinalizadores de compilação (como comvim --version
)? Note que eu também tentou a linha de configuração em~/.Xresources
comoMeta <KeyPress> /: dabbrev-expand() \n\
como encontrado aqui , mas isso não ajudou, tampouco.xrdb -merge .Xresources
no xterm.zsh
, tem essa facilidade.Bash como um recurso semelhante chamado conclusão do bash. Você pode usá-lo pressionando a Tabtecla ao fornecer argumentos para os comandos ao digitá-los.
Exemplo
Se eu começar digitando
ls
e pressionando Tabduas vezes, o Bash fornecerá uma lista de arquivos correspondentes (e opções de linha de comando) para qualquer comando que você esteja tentando usar:E aqui está o exemplo com switches:
Configuração?
Minha instalação já incluía uma regra para
git
:A instalação deste arquivo foi feita quando eu instalei o
git
pacote. Estou no Fedora 19, mas outras distros devem estar fazendo isso também.Observando o arquivo de regras, ele explica que facilitará o preenchimento automático nas seguintes situações:
Portanto, isso deve "apenas funcionar" para você.
fonte
Você pode fazer algo assim com extrakto :
prefix + tab
para iniciar extraktotab
para inseri-lo no painel atual,enter
para copiá-lo para a área de transferência,ctrl-o
para abrir o caminho / URL ouctrl-e
editar com$EDITOR
fonte