Como o histórico de comandos do iPython para Shell

24

Para aqueles que não fazem programação python no ubuntu, o ipython é um shell python com esteróides, mas possui esse recurso incrível que não é preenchido automaticamente com base em nomes conhecidos (ou seja, da mesma maneira que o bash faz quando você pressiona a tecla tab), mas se você começar a digitar um comando e pressionar para cima, ele não percorrerá todo o histórico (como o bash), mas apenas os comandos recentes que começaram com a mesma sequência de letras.

Então, se você executou algum comando longo, como scp -r -P 8000 -l user server.com:~/dir/to/copy ./seguido por vários outros comandos. Se você começou a digitar scpe pressionou, o bash exibia o comando mostrado antes, em vez de apenas rolar o histórico inteiro.

Existe uma extensão como esta para o bash? ou existe algum shell que ofereça esse tipo de recurso?

crasic
fonte

Respostas:

26

O Bash também possui esse recurso, mas não está ativado por padrão. Você pode vinculá-lo ao cursor para cima / baixo inserindo-o em ~/.inputrc:

"\e[A": history-search-backward
"\e[B": history-search-forward

Prefiro vinculá-lo a Ctrl+ up / down:

"\e[1;5A": history-search-backward
"\e[1;5B": history-search-forward

editar: Para preservar ctrl+lefte ctrl+rightpara voltar e avançar em palavras inteiras, inclua também estas linhas no ~/.inputrcarquivo:

# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
"\e[1;5C": forward-word
"\e[1;5D": backward-word
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word
ak2
fonte
Usando esta dica, agora não posso usar Ctrl + esquerda / direita no terminal para pular para a palavra seguinte / anterior, o que arruina todo o propósito para mim. Talvez haja solução alternativa?
Zetah 23/01/12
@zetah I editado na resposta meu solução alternativa para a palavra em movimento
Wim
1
Para preservar todos os padrões, você também pode adicionar $include /etc/inputrc, de preferência na primeira linha.
Tulio Casagrande
9

Tente pressionar Ctrl+ Re digitar algumas letras. Também funciona na ordem inversa.

mgunes
fonte
6

E não se esqueça dos fantásticos atalhos de expansão da história no bash. 1

Estou publicando alguns trechos da página de manual, caso você não os tenha tatuado no braço (ou memorizado).

   Event Designators  
       An event designator is a reference to a command line entry in the  his
       tory list.

       !      Start  a  history substitution, except when followed by a blank,
              newline, carriage return, = or ( (when the extglob shell  option
              is enabled using the shopt builtin).
       !n     Refer to command line n.
       !-n    Refer to the current command line minus n.
       !!     Refer to the previous command.  This is a synonym for `!-1'.
       !string
              Refer to the most recent command starting with string.
       !?string[?]
              Refer  to the most recent command containing string.  The trail‐
              ing ? may be omitted if string is followed immediately by a new‐
              line.
       ^string1^string2^
              Quick  substitution.  Repeat the last command, replacing string1
              with string2.  Equivalent to ``!!:s/string1/string2/'' (see Mod‐
              ifiers below).
       !#     The entire command line typed so far.

Costumo usar a capacidade de me referir à última 'palavra' do comando anterior. Por exemplo,

mkdir /foo/shmoo/adir.horribilus.foo
cp file1 file2 file3 file4 !$ 
ls -l !$

Nos dois casos aqui, as !$correspondências /foo/shmoo/adir.horribilus.foo.


1 ... que foram retirados do csh. Para mitigar o escopo do roubo de recursos do bash, a página de manual do bash diz

   The shell supports a history expansion feature that is similar  to  the
   history  expansion in csh.  

Então, é "semelhante". Tudo isso pode entrar cshou tcsh. Ou qualquer descendente do csh que você não esteja usando devido ao fato de não ser tão maravilhoso quanto bash.

belacqua
fonte
0

Existe uma alternativa semelhante ao que @ ak2 mencionado acima , mas você não precisa criar um novo arquivo .inputrc.

Em vez disso, se você tiver permissões sudo, poderá habilitá-lo no arquivo / etc / inputrc. Neste arquivo existem várias configurações de teclado, incluindo o recurso de pesquisa de histórico (pelo menos para 18.04). O trecho de / etc / inputrc é:

# alternate mappings for "page up" and "page down" to search the history
# "\e[5~": history-search-backward
# "\e[6~": history-search-forward

Simplesmente remova o comentário das duas linhas inferiores usando um editor de arquivos sudo (por exemplo, $ sudo vim), e uma nova sessão do terminal terá o recurso de pesquisa de histórico (para todos os usuários).

ascendentes
fonte