Atingir as teclas de seta adiciona caracteres no editor vi

144

Quando tentei usar as teclas de seta no modo de inserção no editor vi , os seguintes caracteres estão sendo inseridos no editor:

  • para recebo B,
  • para recebo A,
  • para recebo D,
  • para recebo C.

Por favor, ajude-me a resolver este problema.

    
por bvb 05.10.2013 / 07:04

11 respostas

186

Se você ainda não tiver um arquivo .vimrc em seu diretório pessoal, crie um usando:

vim ~/.vimrc

Adicione esta linha ao topo do arquivo:

set nocompatible

Salve o arquivo e isso deve corrigir o problema para você. :)

    
por Gaurav Manchanda 05.10.2013 / 09:23
51

Instalar o vim - > Isso resolverá o problema.

sudo apt-get install vim

Existem muitos bons tutoriais em vim / vi no youtube, ou na web em geral. Para o seu problema, veja aqui

Em seguida, continue com arquivos abertos normalmente :

vi desired-file
    
por sthysel 21.11.2012 / 09:03
26

Com vi , ao clicar em i você ativa o comando para o texto Inserir .
Este comando permite inserir texto no seu arquivo.
E certo, quando clicar:

  • em irá inserir um "A",
  • em irá inserir um "B",
  • ...

Até você desativa este comando.
Para desativar um comando em vi : basta clicar em Esc
E então você voltará ao uso normal de suas setas:

  • para subir,
  • para descer,
  • ...

FYI, aqui estão alguns comandos vi : desta fonte .

:x Retorna fecha o vi , gravando o arquivo modificado no arquivo chamado na invocação original
:wq Retornar sair do vi , escrevendo o arquivo modificado para o arquivo chamado na chamada original
:q Retornar sair (ou sair) vi
:q! Retornar sair do vi mesmo que as alterações mais recentes não tenham sido salvas para esta chamada vi

move cursor para baixo uma linha
cursor move para cima uma linha < br> cursor move deixou um caractere
move cursor um caractere à direita

u desfaça o que você acabou de fazer; uma simples alternância de . refazer o que você acabou de fazer

i insere texto antes do cursor, até que Esc acione o texto I inserir no início da corrente line, até que o Esc acione% a anexe texto após o cursor, até que Esc acesse% A anexar texto ao final da linha atual, até que Esc acesse o abra e coloque o texto em uma nova linha abaixo da linha atual, até Esc pressione O aberto e coloque o texto em uma nova linha acima da linha atual, até que Esc pressione

r substituir caractere único sob cursor (não é necessário Esc )% cw alterar a palavra atual com novo texto, começando com o caractere sob cursor, até que Esc acesse % x delete caractere único sob o cursor
Nx delete N caracteres, começando com o caractere sob cursor
dw excluir a única palavra que começa com o caractere sob o cursor
C alterar (substituir) os caracteres na linha atual, até Esc atingir D excluir o restante da linha, começando com a posição atual do cursor

dd excluir toda a linha atual
Ndd excluir N linhas, começando com a linha atual; por exemplo, 5dd exclui 5 linhas de yy cópia (arranca, corta) a linha atual no buffer
Nyy copy (yank, cut) as próximas N linhas, incluindo a linha atual, no buffer
p cola a (s) linha (s) no buffer no texto após a linha atual

0 (zero) cursor move para o início da linha atual (a que está com o cursor)
$ move cursor para o fim da linha atual
w move cursor para o início da próxima palavra
b move cursor de volta para o início da palavra anterior
:0 Retorna ou 1G move cursor para a primeira linha do arquivo
:n Retorna ou nG move cursor para alinhar n% :$ Retornar ou G mover cursor para a última linha no arquivo

/string procura encaminhar para a ocorrência de string no texto
?string pesquisar para trás para a ocorrência de string no texto
n move para a próxima ocorrência da string de pesquisa em N move para a próxima ocorrência de sequência de pesquisa na direção oposta

    
por Boris 05.10.2013 / 08:52
16

Para desativar as letras de impressão ao pressionar as setas no modo de edição, você pode fazer o seguinte

vi $HOME/.exrc 

(crie o arquivo se ele não existir) e adicione a linha set nocompatible a ele e salve.

    
por Aniket Thakur 08.08.2015 / 14:46
11

Existem três modos no editor vi, a saber:

  • modo de comando
  • modo de entrada
  • modo padrão.

Quando você abre um arquivo, você está no modo padrão. Agora, se você quiser ir para uma posição específica no seu texto, use apenas as teclas de seta ou use h , j , k , l chaves. Note que isto só funcionaria quando você não tivesse pressionado i (ou qualquer outro comando de entrada no modo de entrada como a , A , I ).

O motivo para 'B' pode ser porque as teclas de seta no modo de entrada não funcionam como teclas de seta, então pressione Esc para entrar no modo padrão a qualquer momento. Quando mudar para o modo de entrada, pressione i ou a , e para navegar pressione a tecla i e use as teclas de seta ou h , j , k , l .

    
por ps_cool 21.11.2012 / 08:14
6

Eu tive exatamente o mesmo problema, mas não apenas na minha máquina local, mas também nas conexões via putty em uma máquina sles em uma VM Win7 através de um receptor Citrix. Tanto o host local quanto os hosts remotos mostram após uma reinstalação do Ubuntu o mesmo problema.

Depois de descobrir que

$ localectl list-keymaps 
Couldn't find any console keymaps.

Faz com que este estranho comportamento VI eu instalei o pacote console-data que resolve o problema!

sudo apt-get install console-data
    
por kitingChris 18.01.2017 / 11:53
3

Todas as explicações dadas são um pouco bizarras. Eu tenho o vi mas não o vim instalado.

Verificando alternativas: /etc/alternatives/vi & amp; rightarrow; /usr/bin/vim.tiny

Então, vi é vim.tiny e usa /etc/vim/vimrc.tiny .

E em vimrc.tiny você encontra a seguinte linha:

set compatible

Qual é quase a única coisa neste arquivo. Observe que em /etc/vim/vimrc está usando nocompatible .

Então, instale o vim ou altere o arquivo vimrc.tiny ou crie seu próprio ~/.vimrc , que deve conter a linha:

set nocompatible
    
por Gunstick 10.01.2017 / 23:11
2

Nota:

Há boas informações nas outras postagens, mas nenhuma das postagens tentou explicar por que esse comportamento aconteceu. Muitas pessoas são obrigadas a tropeçar nisso no futuro. Além disso, você poderia marcar essa pergunta como resolvida, já que qualquer um dos posts anteriores provavelmente ajudou você?

Aqui está uma explicação :

O Vi é um editor que já existe há muito tempo, com raízes nos sistemas Unix. É uma boa ferramenta, mas foi iterada e agora é melhor. Vim foi escrito mais tarde e é essa iteração. As pessoas comumente se referem ao vi como 'vim-minimal' e ao vim é uma versão "melhorada" do vi. Você pode pensar assim: o vi é o núcleo e o vim se expande.

Provavelmente você descobriu o comportamento :

Para que você tenha descoberto esse problema, pressionou " i " para entrar no modo inserir e usou as teclas de seta para navegar na linha correta e editar ponto. Isso é o que causou o seu problema inesperado.

Solução 1 ou 2

1) vi someFile Ao usar vi , primeiro mova para o ponto de edição e, em seguida, entre no modo de inserção.

2) vim someFile Basta usar o vim desde o início.

Eu não posso enfatizar o suficiente para ler o manual (man pages) ou usar -h para ajuda. Depois de ajustar os padrões no shell, as páginas do manual se tornarão seu melhor amigo. Exemplo: man vi ou man vim

Confirme se o Vim está instalado .

Abra uma janela do console e execute:

dpkg --list | grep vim

Se você obtiver algo semelhante a isso, poderá começar a usar o vim.

~ $ dpkg --list | grep vim
ii  vim         2:7.4.052-1ubuntu3  amd64  Vi IMproved - enhanced vi editor
ii  vim-common  2:7.4.052-1ubuntu3  amd64  Vi IMproved - Common files
ii  vim-runtime 2:7.4.052-1ubuntu3  all    Vi IMproved - Runtime files
ii  vim-tiny    2:7.4.052-1ubuntu3  amd64  Vi IMproved - enhanced vi editor - compact version

Se o prompt de comando retornar sem nada, então o vim não está instalado. Use os exemplos abaixo para atualizar seus repositórios e, em seguida, instale o vim.

sudo apt-get update
sudo apt-get install vim

Na chance de você usar o vi ou o vim apenas quando pesquisar na internet como consertar algo e se esquecer de digitar vim , existe uma maneira de poder corrigi-lo para o futuro. Eu te aconselho a prestar atenção. Você pode usar um apelido para sobrescrever o vi com uma referência ao vim, de modo que não importa o que você digita no futuro não freqüente, você obtém o vim sem o "oops!" momento. Você sempre pode excluir um alias depois.

Digite vim .bashrc . Mova para baixo até a linha vazia com apenas um ~ (ou para qualquer outra linha que comece com alias (então eles estão agrupados) e então pressione a tecla i para inserir -insert- Em sua própria linha separada, digite o seguinte:

alias vi='vim'

Pressione Esc e digite :wq . Agora você precisa recarregar o arquivo. Tipo source .bashrc Qualquer outro shell aberto depois de você ter feito essas edições carregará automaticamente o arquivo .bashrc.

    
por D75 30.10.2016 / 05:20
1

O editor vi tradicional não reconhece as teclas de seta (... afair). Existem duas soluções:

  1. use vim em vez de vi
  2. use h, j, kel para navegar (não é possível navegar durante a edição no vi tradicional).
por MadMike 05.10.2013 / 07:51
1

Isso também pode ser devido à variável TERM ; configurá-lo por exemplo como este:

 export TERM=xterm
    
por Jasper Nuyens 07.07.2017 / 15:54
1

Em alguns sistemas, a opção nocompatible não está disponível ou pode não corrigir o problema se um plug-in quebrar a funcionalidade da tecla de seta. Aqui está uma solução alternativa ...

Edite o arquivo .exrc para incluir as seguintes linhas:

map! ^[OA ^[ka
map! ^[OB ^[ja
map! ^[OC ^[la
map! ^[OD ^[ha

Ou, se o problema existir apenas no modo normal, você pode alterar para nmap e ignorar o seguinte a , da seguinte maneira:

nmap! ^[OA ^[k

e assim por diante.

Aqui estão as combinações de teclas necessárias para produzi-las (mostrando apenas uma primeira):

map! <CTRL-V><Up-Arrow> <CTRL-V><ESC>ka

Isso escapa do modo de edição, move-se na direção desejada e entra novamente no modo de edição. Isso é necessário para superar a leitura da seqüência de escape como uma sequência de literal < ESC > < A > < A & gt ;, etc.

Fonte: link

    
por Dominic Comtois 08.06.2017 / 04:33