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.
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 builtinset
.
Quando o shell apresenta-o com um prompt (a menos que você está no modo não-edição), você já 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).