Em tudo o que se segue, o ^
indica a posição do cursor.
Estou usando o bash no Terminal no OS X Yosemite e gostaria de usar a edição de linhas no estilo vi:
prompt$ set -o vi
^
Por padrão, ele inicia no modo de inserção do vi, para que eu possa digitar imediatamente
prompt$ hello
^
Agora digamos que eu use a tecla de seta para a esquerda ← ou H para mover para a esquerda:
prompt$ hello
^
Agora eu não posso mais me mover para o certo do o
em hello
usando qualquer → ou eu :
prompt$ hello # I can't move here anymore!
^
Se eu tiver que acrescentar alguma coisa, tenho que acertar Esc então Mudança UMA .
Isso não acontece no modo emacs ( set -o emacs
) ou em certas máquinas Linux (ssh'd no SLC 6.6 com bash 4.1, ou nativamente no meu amigo (acho Arch) com bash 4.3). Em tudo isso, ← então → leva-me ao final da linha onde posso continuar a escrever; no meu terminal Mac eu não posso a menos que eu deixe o modo de inserção.
Isso também não acontece com o vim no meu Mac; O vim me permite passar pelo final das linhas com as teclas de seta no modo Inserir. É apenas o modo readline vi.
Eu tentei atualizar meu bash (com o Homebrew) de 3.2 para 4.3; isso não resolveu.
Eu tentei remover meu .bash_profile e usar um terminal não modificado; isso não resolveu. (Eu tenho alguns aliases e modificadores de prompt no meu .bash_profile.)
eu li isto , isto e isto . Eles não têm respostas.
Agradecemos antecipadamente por qualquer conselho!
Editar: Em um sistema Linux onde as coisas funcionam como eu gostaria, a variável TERM dá
prompt$ echo $TERM
xterm-256color
O conteúdo de /etc/inputrc
está
# do not bell on tab-completion
#set bell-style none
set meta-flag on
set input-meta on
set convert-meta off
set output-meta on
# Completed names which are symbolic links to
# directories have a slash appended.
set mark-symlinked-directories on
$if mode=emacs
# for linux console and RH/Debian xterm
"\e[1~": beginning-of-line
"\e[4~": end-of-line
# commented out keymappings for pgup/pgdown to reach begin/end of history
#"\e[5~": beginning-of-history
#"\e[6~": end-of-history
"\e[5~": history-search-backward
"\e[6~": history-search-forward
"\e[3~": delete-char
"\e[2~": quoted-insert
"\e[5C": forward-word
"\e[5D": backward-word
"\e[1;5C": forward-word
"\e[1;5D": backward-word
# for rxvt
"\e[8~": end-of-line
"\eOc": forward-word
"\eOd": backward-word
# for non RH/Debian xterm, can't hurt for RH/DEbian xterm
"\eOH": beginning-of-line
"\eOF": end-of-line
# for freebsd console
"\e[H": beginning-of-line
"\e[F": end-of-line
TERM
variável de ambiente, bem como o conteúdo de/etc/inputrc
e~/.inputrc
(se existir) de um dos sistemas em que esse comportamento funciona como você deseja (apenas as linhas não comentadas, pois o arquivo é possivelmente muito grande)?.inputrc
no meu diretório home. Eu postei o conteúdo de/etc/inputrc
, foi bem curto, mas não sei se esse particular/etc/inputrc
é o que você quer, já que a máquina Linux na qual eu trabalho serve muitos usuários.Respostas:
Acontece que a solução é simples: atualize a festa para 4.3 . O bash padrão em Macs (até Yosemite) é 3.2. (Minha pergunta acima diz que atualizei e não funcionou, mas acho que demorou um pouco para "pegar".)
Instale o Homebrew com
então faça
em seguida, altere o caminho do shell padrão (em Preferências do Terminal) para
e é isso. Verifique sua versão bash com
e como um bônus adicional, você pode obter indicadores de modo!
e mostrará um
+
para o modo de inserção e:
para o modo de comando.fonte
/etc/shells
e depois mudar o seu shell usandochsh
(ou Preferências do Sistema & gt; Contas ).