Eu sei que posso usar Uppara percorrer os comandos anteriores. A execução do último comando envolve simplesmente Up+ Enter. No entanto, eu estava pensando em comprar o Happy Hacking Keyboard enquanto passo muito tempo vim
.
Este teclado não possui teclas de seta, e a única maneira de saber como obter esse tipo de comportamento é pressionando Ctrl+ Re começando a repetir meu comando anterior.
Existe uma maneira fácil de emular Up+ Enterem um terminal UNIX sem as teclas de seta?
Respostas:
Com
csh
ou qualquer shell implementaçãocsh
-como história de substituição (tcsh
,bash
,zsh
):Então Enter.
Ou, alternativamente :
Então Enter.
Ou Ctrl+ P,Enter
Espaço mágico
Além disso, observe que
!!
e!-1
não será expandido automaticamente até você executá-los (quando for tarde demais).Se estiver usando
bash
, você pode colocarbind Space:magic-space
em~/.bashrc
, em seguida, pressionando Spacedepois o comando de expansão automática-los em linha, permitindo que você inspecioná-los antes da execução. Isso é particularmente útil para a expansão do histórico de uma execução de comando há um tempo atrás, por exemplo!echo
, puxará a última execução de comando começando comecho
. Com espaço mágico, você pode visualizar o comando antes que ele seja executado.Isso é o equivalente a fazer
bindkey ' ' magic-space
emtcsh
orzsh
.fonte
magic-space
essa é uma opção doce!histverify
opçãoshopt
que fará com que o readline execute a expansão do histórico, mas não execute o comando ao pressionar a tecla Enter pela primeira vez. O que permitirá avaliar o resultado e decidir se é isso que você deseja executar.!!
é usar sua expansão no local . Por exemplosudo !!
.A maioria dos shells que possuem um recurso de edição de linha de comando suporta as ligações de teclas do Emacs. (um pequeno subconjunto)
Como alternativa, você pode configurar seu shell para usar o modo de edição de comandos vi, adicionando
set -o vi
ao seu arquivo de inicialização do shell (por exemplo,~/.bashrc
). Então, por exemplo, você pode!!
). A tecla menos -também funciona como um comando "subir".!-12
).vi
modo de comando, assim que você vai precisar usar umvi
comando de edição (por exemplo, I, A, C, R, ou um dos seus homólogos minúsculas) para realmente acrescentar ao comando da história.Então, por exemplo, EsckisudoSpaceEnteré equivalente a
sudo !!
.!-2:- !$
. (Infelizmente, parece não suportar buffers nomeados.)fonte
vi
truque foi ótimo !!!delete
Ctl + u em ZshO meu favorito é CTRL+ Pentão CTRL+O
Isso funciona por padrão, nenhuma configuração extra é necessária. ^ P permitirá que você alterne para o último comando e ^ O permitirá que você execute a linha atual
Observe que CTRL+ Opode ser usado quantas vezes você quiser
fonte
^J
ls
oupwd
anteriormente.Certo! Já que você está acostumado a
vi
combinações de teclas, por que não configurar seu shell para responder a elas? Parabash
, coloque isso em seu~/.inputrc
:As instâncias em execução do bash não relerão o arquivo; portanto, efetue logout e logon novamente.
zsh
até detectará isso para você: se nenhum dos seus scripts de inicialização forçar o modo de edição de uma maneira ou de outra,bindkey
e se sua$EDITOR
variável de ambiente for detectadavi
, elavi
ativará automaticamente as combinações de teclas. Se você precisar forçá-lo, coloque isso em seu~/.zshrc
:Depois disso, utilizar ESCcomo habitual para entrar linha de comando e de ke jpara mover para cima e para baixo.
TAMBÉM : As ligações de shell padrão na maioria das conchas são as ligações Emacs, então na verdade Crtl-Pe Ctrl-Njá deve funcionar sem você ter que mudar nada.
fonte
Com qualquer shell POSIX implementação da Portabilidade usuário opção (inclui
ksh
,zsh
,bash
,yash
), você também pode usar ofc
comando:Veja um exemplo:
Mais informações em Executar uma série de comandos da resposta da história de Jonathan Leffler.
fonte
Para todos os usuários do Mac iterm2:
Você pode vincular ⌘+ Ra
0x0C 0x10 0x0d
. Isso limpará o terminal e executará o último comando.fonte
0x10 0x0d
(ou seja, omita o0x0C
).Acho que preciso refazer comandos como superusuário frequentemente, então
refaz o comando anterior como se eu tivesse me lembrado de digitar
sudo
em primeiro lugar.fonte
O
ksh
shell tem um alias padrãor
que repete o comando mais recente. Está vinculado afc -s
:Curiosamente, a
bash
documentação para ofc
builtin (help fc
, e também no próprio manual) até menciona isso, mas não é um alias padrão nesse shell:Em
bash
, isso também funcionaria mesmo se você desativasse as expansões do históricoset +H
.No
zsh
shell, há umr
built-in documentado para ser o mesmo quefc -e -
.O
fc
utilitário é um utilitário padrão do POSIX .fonte
Com
csh
ou qualquer shell implementaçãocsh
-como história de substituição (tcsh
,bash
,zsh
), você também pode usar a!<beginning of command>
chamar o último comando começando com<beginning of command>
.por exemplo, se você correu
!ta
executariatail file.txt
fonte
tl; dr
!!
apenas anexa o último comando ao seu comando atual.<backtick>!!<backtick>
executa o último comando e anexa a saída ao seu comando atual.Na verdade, existem 2 variantes:
Deixe-me mostrar dois exemplos:
Exemplo 1
Como você vê acima, estou executando um comando e essencialmente apenas anexando o último comando.
Outra variação
Exemplo 2
fonte
vi `!!`
. Muito útilQuando estou usando um bom emulador xterm, por exemplo, massa de vidraceiro, minha maneira favorita de proceder é selecionar o comando, incluindo alimentação de linha, copiá-lo para a área de transferência e, em seguida, clicar com o botão direito do mouse para colá-lo. Isso repete o comando em um único clique. Isso também funciona bem para uma sequência de comandos separados por ponto e vírgula.
fonte
você pode usar
!n
para executar o enésimo comando no terminal. onde 'n' é a linha dehistory
comando não.fonte
!?
para o último comando? Tem certeza de que não está misturando!!
(o que já foi abordado em outras respostas)?Digite History e observe o número na frente do comando que você deve executar e usar
!number
Você também pode usar ! -1 (1 sendo o último comando que você executa, substitua-o pelo número de contagem que você obtém quando o faz a partir de baixo, mantendo o último executado como 1)
fonte
Existem várias camadas nas quais você pode solicitar o último comando.
Editor de linha
O editor de linha (onde você digita seus comandos) é fornecido diretamente pelo ksh, pela linha de leitura da biblioteca no bash e pela biblioteca zle no zsh. Outros shells, como o dash, podem não ter uma biblioteca de edição para entender essas chaves (a menos que compiladas com a
--with-libedit
opção ativada).Este trabalho em ksh, bash, zsh:
Ctrl- P# Modo Emacs (anterior)
Ctrl- N# Modo Emacs (próximo)
ESC- k # vi modo ESC para ir para o modo de comando ek para cima
ESC- j # vi modo ESC para ir para o modo de comando ej para baixo
história
O sistema de histórico fornecido por muitos shells permite a expansão de alguns atalhos:
comandos
Existem alguns comandos capazes de recuperar comandos do histórico.
Como o comando bastante detalhado (apenas para imprimir):
ou o comando mais antigo e, portanto, geralmente mais portátil
fc
(reexecuta diretamente):Ou talvez o mais simples
fc -s -1
, mas o zsh não aceita essa opção para fc.Se você quiser apenas imprimir o comando, use:
fc -nl -1 -1
.Para editar, definido
FCEDIT
para um editor de texto (ex, ed, emacs, vi, etc.) e usar fc diretamente:fc -1
.fonte