Pergunta

Do ponto de vista de programação, quando você define o shell bash para usar vi ou emacs via

set -o vi

ou

set -o emacs

O que realmente está acontecendo aqui? Estive lendo um livro em que afirma que os usos shell bash qualquer um destes editores para a entrada para o próprio reservatório, mas eu pensei que pode ter readline usado.

Foi útil?

Solução

Bash ainda está usando readline. usos readline tanto emacs ou vi modo e definir o modo alterna entre os vários modos de edição. Você pode verificar a pasta lib / readline no código fonte base para ver os vários atalhos de teclado.

Outras dicas

De acordo com os BASH_BUILTINS página homem (1) (no Fedora 8):

   set [--abefhkmnptuvxBCHP] [-o option] [arg ...]

... (ignorando todas as opções de uma única letra)

         -o option-name
            The option-name can be one of the following:

...

            emacs   Use  an  emacs-style  command  line  editing interface.  This is
                    enabled by default when the shell  is  interactive,  unless  the
                    shell is started with the --noediting option.
...
            vi      Use a vi-style command line editing interface.
I interpretar que a significar que o bash está a interpretar os comandos directamente para edição de linha. Esta opção simplesmente define qual comando set para uso. Consulte a página man readline (3).

Ele usa as teclas que são familiares a usuários de um dos editores para editar a linha de comando.

Readline é a facilidade que fornece esse recurso para Bash e outros programas.

De man bash:

READLINE
       This is the library that handles reading input when using  an  interac‐
       tive shell, unless the --noediting option is given at shell invocation.
       Line editing is also used when using the -e option to the read builtin.
       By default, the line editing commands are similar to those of emacs.  A
       vi-style line editing interface is also available.  Line editing can be
       enabled  at  any  time  using  the -o emacs or -o vi options to the set
       builtin (see SHELL BUILTIN COMMANDS below).  To turn off  line  editing
       after  the  shell  is running, use the +o emacs or +o vi options to the
       set builtin.

Pelo que eu sei, readline é o que fornece a funcionalidade de edição de linha para a festança.

Uma ressalva:. Quando você pressiona v no modo de comando vi, você começa o editor vi soprado completo para editar sua linha de comando

De man bash:

readLine
Esta é a biblioteca que lida com a leitura de entrada ao usar um shell interativo, a menos que a opção --noediting é dado em chamada de shell. Por padrão, a linha de comandos de edição são semelhantes aos de emacs. A interface de edição de linha de vi-o estilo também está disponível. Para desligar edição de linha após o shell está em execução, use as opções +o emacs ou +o vi ao builtin set.

Quando o shell apresenta-o com um prompt (a menos que você está no modo não-edição), você usando readline. Você quer vai estar no modo emacs ou modo de inserção vi (que é por isso que você pode apenas usar ESC para voltar ao modo de comando vi).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top