Is there a way to get a command from history without executing it?
Talvez eu esteja perdendo o ponto da pergunta, pois duvido que eu seja a única pessoa que saiba sobre :p . Significa "imprimir". Se você digitar !100:p , o shell irá imprimir (isto é, exibir) o comando # 100 sem executá-lo.
Se você não souber sobre os operadores : no histórico, deverá aprender.
Como a “ilustração numérica” aponta ,
:n recupera a palavra n de um comando.
Você também pode usar :n-m para obter um intervalo;
e existem padrões interessantes.
Por exemplo, :- (deixando n e m em branco) obtém todas as palavras, exceto a última. :$ te dá a última palavra. :h é “cabeça”, então se você digitar
ls -ld /asdfg/qwerty/foo/bar
então
!:- !$:h
se transforma em
ls –ld /asdfg/qwerty/foo
Ah, sim, !$ é a abreviação de !:$ . :s é substituto, como em :s/old/new/ .
Isso é o mesmo que ^old^new^ , exceto para coisas como
-
:s pode ser usado em qualquer comando (como em !100:s/... ); ^^ funciona apenas no comando mais recente.
-
:s pode ser usado em palavras individuais ou em intervalos de palavras. Por exemplo,
!:- !$:s/d/D/
obtém
ls -ld /asDfg/qwerty/foo/bar
(em vez de ls -lD ... ).
-
:s pode ser aplicado globalmente. A sintaxe não é intuitiva, mas, quando :s/old/new/ substitui a primeira ocorrência, :gs/old/new/ substitui todas as ocorrências.
Além disso, depois de obter um comando do histórico sem executá-lo
(por exemplo, com !100:p ), possivelmente com modificações (como mostrado acima),
Torna-se o comando mais recente na sua lista de histórico.
Agora você pode pressionar ↑ (cursor para cima) e editá-lo.