Para solicitar que o comando seja impresso em vez de executado após a substituição do histórico, adicione o :p
modificador , por exemplo !42:p
. O comando resultante também será inserido no histórico, para que você possa pressionar Uppara editá-lo.
Se você tiver a histverify
opção set ( shopt -s histverify
), sempre terá a oportunidade de editar o resultado das substituições do histórico.
O fc
builtin fornece acesso limitado à expansão do histórico (sem designadores de palavras) e permite editar um comando anterior em um editor externo.
Você pode usar !prefix
para se referir ao último comando que começa com prefix
e !?substring
ao último comando que começa com substring
. Quando você sabe o que está procurando, isso pode economizar muito tempo history | less
.
Outra maneira de pesquisar no histórico anterior é a pesquisa incremental: pressione Ctrl+ Re comece a inserir uma substring do que você está procurando. Pressione Ctrl+ Rpara ir para a ocorrência anterior da sequência de pesquisa até agora e Ctrl+ Sse você foi longe demais. A maioria dos outros do que as teclas Ctrl+ R, Ctrl+ S, Backspacee personagens comuns terminar a pesquisa incremental e têm seu efeito habitual (por exemplo, teclas de setas para mover o cursor na linha que você alcançou, Enterpara executar o comando).
Gilles 'SO- parar de ser mau'
fonte
stty -ixon
antes que Ctrl-s funcione.Ctrl-s
é importante, caso contrário, a pessoa fica presa como eu .Outro pequeno: Alt+#
comenta a linha atual e a move para o buffer do histórico.
Portanto, quando você monta uma linha de comando e precisa emitir um comando provisório para, por exemplo, encontrar um arquivo, basta pressionar Alt+ #, emitir o outro comando, subir no histórico, descomentar e prosseguir.
fonte
Esc
,#
trabalhaVocê pode usar o espaço mágico para expandir a história antes de pressionar Enter. No seu .inputrc, mapeie o espaço para o espaço mágico:
Agora, sempre que você digitar um espaço após uma especificação de histórico, ele será imediatamente expandido - útil se você quiser editá-lo também!
fonte
Dê uma olhada no
history-expand-line
comando, vinculadoAlt+^
por padrão. Ele expandirá a linha no local, que você poderá editar.fonte
Usando
Ctrl+r
você pode pesquisar o histórico:Qualquer comando encontrado pode ser editado ...
Acho que encontrei exatamente o que você precisa: execute
shopt -s histverify
e na próxima vez em que você quiser usar o!n
comando não será executado, mas apenas colocado na linha de comando ...fonte
!n:p
funcionar?Eu sempre quis isso. Quando usei csh (e tcsh), tive um idioma:
!:88*:p
Esse idioma insere "palavra 88 até a última palavra" do comando anterior no ponto em que você está digitando na linha de comando atual, que geralmente é o fim. No csh, não é um erro que essa expressão não produza palavras. Ou seja, não precisa haver uma palavra 88, nem nenhuma que a segue. Se não houver palavra 88, isso não adiciona palavras ao final do comando que está sendo digitado e empurra a linha de comando resultante para o histórico sem execução.
Como você provavelmente sabe,
*! (como !! e! -1) é o comando anterior;
*: 88 é a palavra 88 (a primeira palavra - normalmente o comando - é zero) e o csh exigiria a existência dessa palavra, mas ...
*: 88 * são todas as palavras que começam na palavra 88 e, em seguida, csh não exigir que a palavra exista;
*: p significa imprimir, mas não executa a linha de comando.
Com ou sem o: p, a linha de comandos é adicionada ao histórico de comandos.
"Por que 88?" você se pergunta? Porque é a mesma chave que * preciso. Se você possui comandos por tanto tempo, talvez!: 888 *: p é o que você precisa. Lamentamos, mas isso não funciona com o bash AFAIK. Bash dirá apenas
bash: :88*: bad word specifier
Curiosidade: seu comando geralmente não precisa ser o primeiro.
> /tmp/foo echo My command is word 3
é válido no bash e no csh.
fonte
Eu normalmente uso Ctrl+ rpara pesquisar e depois Ctrl+ epara ir para o final da linha sem executar.
fonte