comportamento estranho do vi no terminal ssh do Debian OSX

1

Ao criar um arquivo de swap eu emito vi /etc/fstab como root. O arquivo fstab aparece, ótimo. Emitir G $ para pular para o final da linha e i para entrar no modo INSERT. Pressione a seta para a direita para mover o cursor por um caractere para a direita. vi insere um capital C em uma nova linha. Confuso, eu pressiono a tecla de seta para a esquerda. vi insere um capital B .

Estou muito confuso. Onde eu começo a descobrir o que está acontecendo aqui? Eu preciso poder editar arquivos com vi .

    
por Dave 09.01.2016 / 23:19

3 respostas

0

OSX "vi" parece ser vim. Sua mensagem de versão diz (para El Capitan ):

VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Oct 27 2015 16:22:14)
Compiled by [email protected]
Normal version without GUI.  Features included (+) or not (-):

Existe uma chance remota de que você não esteja usando o vim, mas ninguém ofereceu uma alternativa plausível.

O vim aceita sequências de teclas do cursor no modo de inserção.

No entanto, uma armadilha disso é se o comportamento real do terminal não corresponder à descrição do terminal definida com a variável de ambiente TERM . Por exemplo, a descrição do terminal "linux" não usa modo de aplicação , e se você tiver definido TERM para isso enquanto estiver trabalhando em um terminal que tenha sido inicializado para usar o modo de aplicação , então o vim não irá esperar uma seqüência de escape O B , pois está procurando escape < kbd> [ B . O resultado é que você obteria um B inserido ao pressionar a tecla de seta para baixo.

Leitura adicional:

por 09.01.2016 / 23:51
0

Você pode usar o vim que é melhorado, e pode usar as teclas de seta, vi como as chaves de uso padrão h j k l para mover o cursor Se o vi for aliado ao vim, verifique com

alias vi

Então, edite $HOME/.vimrc e colocar nesta linha

set nocompatible

Se estiver interessado em unix eu geralmente uso este vimrc

set nocompatible
set backspace=indent,eol,start
syntax on
imap <esc>OH <esc>0i
cmap <esc>OH <home>
nmap <esc>OH 0
nmap <esc>OF $
imap <esc>OF <esc>$a
cmap <esc>OF <end>
    
por 09.01.2016 / 23:51
0

As teclas de seta estão sendo definidas no seu termcap (5) como seqüências de escape. Esta é a configuração padrão do VT100. Você pode ver a seqüência em um terminal com: ^ v seguido por qualquer coisa. Seta para a direita na linguagem VT100 é ^ [[C (^ [) é escape. Observe que isso indica ao vi (1) para sair da inserção, mover para cima um parágrafo (nenhuma ou uma linha neste caso, aparentemente) e mudar para o final da linha. Resultados inesperados semelhantes surgem ao usar teclas de função em qualquer programa não projetado para lidar com eles.

Existem 2 soluções para este tipo de problema que não é nem SO, nem programa, nem terminal específico. A primeira solução é usar um vi (1) que saiba lidar com a navegação enquanto estiver no modo de inserção. vim (1) é um desses vi (1). Ele funciona bem em emuladores w / vt100 e tem sua própria GUI, se você quiser instalá-lo dessa maneira. Muitos consideram bloatware vim (1), embora; achando lento e pesado. Outras opções provavelmente mais inchadas incluem o Eclipse (1) w / vwrapper plugin, e o emacs (1) com o plugin Viper.

A outra solução é usar o vi (1) como deveria ser usado em VT100s reais. Não use a seta ou outras teclas de função de caracteres múltiplos no modo de inserção. A sequência chave na pergunta:

G - vai para a última linha do arquivo $ - vai para o último caractere da linha atual eu - insiro antes do caractere atual

está incorreto para a tarefa. Em vez de usar um caractere atual de acréscimo, a tecla de seta não é necessária para passar o último caractere na linha.

OR, melhor ainda

G - última linha A - acrescentar linha atual

    
por 10.01.2016 / 01:01

Tags