Em alguns sistemas Unix, posso digitar Ctrl-A ou Ctrl-E para ir para o início ou fim da linha. Em alguns sistemas Unix não consigo e ele apenas imprime ^A ou ^E, etc. O que controla se esse pressionamento de tecla funciona como esperado (mover-se pela linha de comando) ou imprimir o caractere ^A, ^E, etc.?
Responder1
Tudo depende da implementação específica do shell (você pode ter shell padrão diferente em sistemas diferentes ou até mesmo para usuários diferentes dentro de um único sistema, por exemplo, bash, ksh, tcsh, etc).
Também depende do próprio shell.
Por exemplo, o bash suporta dois modos: emacs e vi. Cada modo tem seus próprios atalhos (emacs ou vi). Para alterá-lo você deve executar set -o emacs
(normalmente é o padrão) ouset -o vi
Você pode encontrar mais informações na documentação específica do shell.
Responder2
dr.
set -o emacs
ativará as combinações de teclas Ctrl-A, Ctrl-E, Ctrl-B, etc. emacs na maioria dos shells que você provavelmente usará.
O shell pode não ter nenhum recurso de edição de linha ou pode estar no vi
modo de edição (o único especificado pelopadrão).
Quando não estiver no emacs
modo de edição, Ctrl-A e Ctrl-E não têm significado especial. Se a configuração echo
e echoctl
stty/termios estiverem ativadas, todas as teclas de controle que não forem tratadas de maneira especial serão exibidas na ^A
notação ^X
"caret".
Muitos shells (como ksh
ou zsh
) determinarão o modo de edição padrão (vi ou emacs) com base nos valores VISUAL
e nas EDITOR
variáveis de ambiente (nesta ordem de precedência, e também no tratamento de variantes como vim
, elvis
, xemacs
, etc).
Isso foi quebrado (de forma muito irritante!) em mksh
, mas ainda é o caso em outros pdksh
shells derivados.
Outros shells gostam bash
ou tcsh
padronizam o emacs
modo de edição, mas isso também pode ser substituído no arquivo de configuração da biblioteca de edição de linha.
Para oreadline
biblioteca usada por bash
e muitos outros programas, os arquivos de configuração são ~/.inputrc
(ou um arquivo especificado na INPUTRC
variável de ambiente) com um fallback /etc/inputrc
e as configurações são:
set editing-mode vi
set editing-mode emacs
Para a biblioteca editline
/ libedit
[1] usada por muitos programas BSD, o arquivo de configuração geralmente é~/.editrc
e as configurações são:
bind -v # for vi
bind -e # for emacs
[1] não deve ser confundido com olibeditline
readline "work-alike" que fornece apenas um modo de edição emacs.