Podemos usar as setas para cima e para baixo para navegar no histórico de comandos.
Em alguns IDEs, como o Matlab, se introduzirmos algo e pressionarmos as teclas de seta, rolaremos apenas os comandos do histórico, começando pelo que inserimos. Isso é realmente conveniente, mas em um terminal shell, isso não funciona.
Existe alguma maneira de obter uma função semelhante em um terminal shell? E outras dicas para melhorar a eficiência no uso de terminais?
fish
;) #\e[5~
e\e[6~
, utilização\e[A
,\e[B
.Respostas:
O que você está procurando é CtrlR.
Digite CtrlRe digite parte do comando que você deseja. O Bash exibirá o primeiro comando correspondente. Continue digitando CtrlRe o bash passará pelos comandos correspondentes anteriores.
Para pesquisar para trás no histórico, digite CtrlS. (Se CtrlSnão funcionar dessa maneira para você, isso provavelmente significa que você precisa desativar o controle de fluxo XON / XOFF: para fazer isso, execute
stty -ixon
.)Isso está documentado em "Pesquisando" em
man bash
.fonte
Ctrl-Q
para sair do estado congelado, se você já tiver batidoCtrl-S
sem desligar o controle de fluxo primeiro e tiver congelado o terminal.Coloque estes em seu
~/.inputrc
:Estes fazem Page Upe Page Downse comportam como você deseja. (Algumas distribuições já o configuraram para você.) Pessoalmente, acho isso mais conveniente do que Ctrl+ Rou
history
.fonte
~/.inputrc
ou/etc/inputrc
ou o arquivo referenciado pela variável de ambiente$INPUTRC
é o arquivo de configuração de edição de linha de todos os aplicativos usando o readline, incluindo o bash (seu shell). Ele possui alguns recursos internos de edição de linha, incluindo os dois: na página de manual do bash, procure por uma dessas palavras-chave para descobrir mais.\e[5~
/\e[6~
são as seqüências de escape geradas pelas teclas Page Up / Down na maioria dos emuladores de terminal; para vê-lo, inicie ocat
comando e pressione essas teclas (o byte de escape é representado no terminal como^[
, em inputrc como\e
).echo $INPUTRC
isso está vazio. Estou usando o Ubuntu 14.04"\e[A": history-search-backward
e"\e[B": history-search-forward
Além da história da ^ r / ^ s, i-search:
alt.insere a última "palavra" do comando anterior no cursor. Repita para obter a última palavra dos comandos mais antigos. (Mas observe que um final
&
conta como a última palavra para comandos em segundo plano).Isso é super útil para
mkdir foo
,cd
alt-ponto. Ainda mais rápido que a seta para cima, ^ a, alt-d (excluir palavra para frente)cd
,.Para obter a penúltima palavra, use
esc
-
2
alt+.
(por exemplo, use um argumento numérico no estilo emacs paraalt+.
. Contagens negativas a partir do final, contagens positivas a partir do início.) Mas isso geralmente é mais problemático do que vale a pena; em algum momento, é mais rápido acessar o mouse e copiar / colar ou seta para cima e ^ w / ^ y parte dele (veja abaixo).Se o seu terminal estiver configurado de maneira adequada / correta, as teclas Ctrl-Esquerda e Ctrl-Direita retrocederão / avançarão. Se não, espero que pelo menos alt-be alt-f façam a mesma coisa.
ctrl- / é um desfazer. Você pode usar a repetição automática para excluir palavras com muito mais eficiência, se puder desfazer quando exceder um pouco.
A mistura / combinação de comandos mais poderosa vem do uso do kill-ring, que funciona exatamente como no Emacs. ctrl-y para colar o último ctrl-w / ctrl-u / ctrl-backspace / alt-d. Alt-y para percorrer o texto morto mais antigo.
Ctrl-w múltiplo ou o que for seguido em seguida na entrada do anel de interrupção. Use as setas esquerda e direita ou algo para interromper a entrada se desejar remover duas coisas e colar apenas uma depois.
Combinando tudo isso, você pode
alt+r
para restaurá-lo como estava antes de excluir parte dele.>
para ir até o fim da história (ou seja, seta para baixo até o fim), voltar ao comando em que você estava no meio.Outras dicas de uso interativo:
Ative
shopt -s globstar
, para que você possa fazer**/*.c
(recursivo, incluindo o diretório atual). Às vezes, útil para uso interativo, mas geralmentefind -name '*.c' -exec foo {} +
é melhor.Se você escrever scripts bash, também será útil ter
shopt -s extglob
ativado seus shells interativos. Você vai , por vezes, encontrar um uso para o material como*.!(c|h)
para coincidir com arquivos que não terminam com .c ou .h.Encontrar aliases que você gosta de
ls -l
,less
e qualquer outra coisa que você faz um monte. (cp -i
,,mv -i
erm -I
são legais. Não use o hábito de depender deles para fazer uma empresa seletiva. GNU rm's -I pede uma vez todos os argumentos.)Eu gosto
alias m=less
(m para "mais"). Euless
configurei ,e .vinculei ao arquivo anterior / seguinte (lesskey
). O padrão é uma sequência de pressionamento de teclas múltiplas que não pode ser usada com repetição automática.Eu gosto de fazer tudo dentro da tela GNU. Acho mais fácil acompanhar as janelas de tela numeradas do que um monte de guias no Konsole (ou qualquer outro emulador de terminal que eu tentei). Se você ainda não sabe
screen
, aprenda o tmux porque é mais novo e menos sujo.Para obter algo parecido com a funcionalidade de abrir um novo shell com o mesmo cwd que outro shell, eu uso um gancho personalizado para cd / pushd / popd que me permite fazer o
cds 8
cd para qualquer dir que meu shell na janela 8 da tela estiver usando. Isso funciona mesmo para shells fora da sessão de tela, desde que haja apenas uma sessão de tela.fonte
gnome-terminal
no Ubuntu 14.04, antes de mudar para o KDE. A opção relevante está nas configurações do seu terminal, esc-prefix vs high-bit, e talvez em outras configurações. Alguns deles não funcionam perfeitamente para mim através do ssh. (por exemplo, ctrl esquerda / direita munge o código de escape para a seta, e eu fico5D
aparecendo literalmente)Adicione as seguintes linhas ao seu
~/.inputrc
Isso é semelhante à resposta do egmont, mas em vez de usar Page Up e Page Down, ele usa as seqüências de escape para Seta para cima e Seta para baixo. Dessa forma, é muito mais conveniente usar em um Mac.
fonte
Eu sempre tendem a configurar minhas máquinas com um grande valor HISTSIZE, para manter uma lista de histórico mais longa, além de HISTTIMEFORMAT com o valor do carimbo de data / hora para que eu possa ver quando o comando foi executado.
fonte
O meio que eu costumo usar é combinar o
history
comando comgrep
IE:
Isso exibirá um histórico numerado de comandos digitados que contêm esse comando, e você poderá usar:
refazer esse comando.
IE:
history | grep history
Seguido por:
!571
vai repetir
history | grep history
fonte
!
substituição do histórico é menos segura.Usei diariamente 4 dicas (e algumas outras) no meu terminal bash:
Execute o último comando:
!!
Execute o comando N do histórico:
!N
Imprima o último comando começando com o prefixo do histórico:
!prefix:p
Execute o último comando começando com o prefixo do histórico:
!prefix
fonte
Se estiver tudo bem para você usar em
zsh
vez debash
usar, use oh-my-zsh para isso.Ele contém a seta para cima e para baixo na navegação pelo histórico de comandos. Permite também a mesma navegação quando você já digitou o texto (como Mathlab).
editar: ele também contém outros itens focados no desenvolvedor, como aliases e temas. Esses extras tornam a distribuição maior e mais complexa de usar.
https://github.com/robbyrussell/oh-my-zsh
fonte
oh-my-zsh
contém toneladas de coisas. Você também pode dizer: Esse recurso exato está incluído nessa distribuição, quando tudo o que você precisa é de uma configuração ou aplicativo específico.Adicione o seguinte alias ao ~ / .bashrc
Uso:
h fire
vai me dar uma lista de comandos que contêm fogo . ouh ^fire
vai me dar uma lista de comandos que começam com fogo .Isso é útil quando quero visualizar uma série de comandos ao mesmo tempo.
A propósito,
'"'"'
é feio, mas não consegui encontrar outras maneiras de evitar aspas simples em aspas simples.fonte
h="history | awk '{\$1=\"\"; print}'
deve funcionar. alternativamente, crie uma função e chame isso.