Teclas de seta do Linux vi quebradas no modo de inserção


95

Minhas teclas de seta não funcionam no vi no modo de inserção em casa, elas apenas inserem uma nova linha e uma letra maiúscula, como 'A'. Existe uma maneira de consertar isso?


3
Quero dizer distribuição de linux?
Miquel

Eles trabalham fora de casa? :-)
Brian Agnew

4
Obviamente, a solução é o emacs. Obviamente.
Paul Nathan

38
@Paul Nathan - Se a solução for emacs, não quero saber qual é o problema.
Chas. Owens

Respostas:


107

Presumo que você esteja usando o vim, pois ele está marcado como Linux. Experimentar:

:set nocompatible

(Você pode desejar configurar seu .vimrc com isso adicionando este comando a ele. Crie um novo arquivo .vimrc se ainda não estiver presente em seu diretório inicial, execute echo $HOMEpara verificar o caminho do diretório inicial.)


7
Certifique-se de iniciar o vi com o comando vime não vi. A maioria dos recursos avançados e úteis do vimsão desabilitados por padrão, a menos que você inicie com vim.
pts

1
@pts - somente em sistemas quebrados. Iniciar o vim como vi em todas as minhas caixas funciona bem; no entanto, existem algumas caixas CentOS que usei que demonstram o comportamento do qual você está falando.
Chas. Owens

Alguém pode editar esta resposta para incluir como ela ficaria em um vimrc?
Stephan

1
@Stephan Adicionar set nocompatibleem sua própria linha no .vimrc
Matthew Wilcoxson

No Ubuntu eu resolvi isso simplesmente instalando o vim (sudo apt install vim) a partir desse momento no vi funciona bem com as teclas de seta no modo de inserção. Edit: Vejo agora que isso já foi mencionado por Han abaixo aqui.
pizzamonster

74

Ubuntu vem com vim-tiny , que não tem todos os recursos que o vim tem.

Faça um rápido sudo apt-get install vimpara obter todos os recursos interessantes de que todos estão falando.


1
Isso era exatamente o que eu precisava no mint linux. Ao instalar o vim, ainda consegui começar a usar o "vi" e todo o realce de código agora estava ativado. Que conhecimento de Linux fantástico :)
wired00

1
Isso funcionou para o meu Raspberry Pi (Jessie Lite). Eu estava tendo esse problema quando queria proteger o shell nele, mas agora está totalmente resolvido :-)
JakeD

35

:set term=builtin_ansi

consertou para mim. Você pode colar isso no vim enquanto está no modo de escape (modo bleep) ou adicioná-lo ao final de ~ / .vimrc sem o ":" inicial


: set term = xterm também pode funcionar (e mais fácil de lembrar).
Alexx Roche

FYI :set term=builtin_ansitrabalhou para mim. :set term=xtermnao fiz.
FractalSpace

em uma das minhas máquinas Linux eu uso export TERM=xtermna linha de comando antes de invocar o vi e então :set term=xtermno vim 7.2 funciona para mim
Alexx Roche

Funciona perfeitamente! Obrigado!
Akhmedzianov Danilian

Isso funciona para permitir a navegação com as teclas de seta, mas eliminou completamente todos os códigos de cores do terminal.
Ken Ingram

16

vi não suporta teclas de seta no modo de inserção. Use o vim. Embora seu vi possa ser apenas um link para o vim, ele pode ser configurado para se comportar como o vi "original" e, portanto, desabilita as teclas de seta. Basta invocar o vim diretamente.


Embora não seja uma solução, é a melhor explicação para o comportamento (imo), deixando clara a diferença entre vie vim. Mas na minha caixa vimimprime command not found: D
Daniel W.

@DanFromGermany Talvez você tenha apenas um vi instalado e não o vim. Por favor, tente instalar o vim através do gerenciador de pacotes do seu sistema Linux se quiser usá-lo.
lothar

:set term=ansitrabalhou para mim, obrigado Raz . você diz que 'não suporta'. Eu estou me perguntando se você disse isso porque o vim-tinypacote do ubuntu -Estou usando- é diferente do vanilla viou a configuração de termos funcionaria nisso também?
n611x007

8

Ainda outra variação: este problema apareceu para mim depois de algumas alterações .vimrc. Uma pesquisa combinada acabou revelando que meu mapeamento inteligente do ESC no modo normal não era uma boa ideia. Removê-lo resolveu o problema:

" this is NOT something you want in .vimrc:
" In normal mode, hitting Esc turns off search highlights:
nmap <ESC> :nohl<CR>  " Do NOT add this to .vimrc

Tentei de tudo depois de enfrentar esse problema, e era isso que eu procurava, obrigado!
Dan Bartlett

Obrigado pela correção, olhei em todos os lugares. Alguma ideia de por que o remapeamento de escape causa problemas?
não foto

6

A única coisa que funcionou para mim foi ": set term = ansi"


1
Isso também parece ter funcionado para mim usando um contêiner do Docker.
ohlando

1
Este funcionou para mim também. Estou usando cmd.exe no windows e sshing no ubuntu usando vagrant
codelogn

@ CodeCodeO-1-O-log-n então de que lado você estava usando vino windows ou no ubuntu? :)
n611x007

No Windows, executei cmd.exe e vagrant ssh no servidor ubuntu e vi no servidor. Mas depois comecei a usar o Putty e não preciso mais fazer isso e o Putty está funcionando muito bem para mim.
codelogn

2

Eu tive o mesmo problema com as teclas de seta, mas quando usei aquele set nocp ou nocompatible, meu backspace não funcionou corretamente

por alguma razão, quando instalei o vim com sudo apt-get install vim, o vi não teve mais problemas com setas ou backspace


1

Acabei de ter um problema com as teclas de seta após alternar para usar o git no .vim.

Eu instalei este repo - https://github.com/sunaku/.vim

e depois de vasculhar por uma hora, descobri que o plugin AutoClose (que não gostou mesmo) quebrou as teclas de seta.

A documentação do plugin sugere que se deve definir set ttimeoutlen = 100, mas isso não funcionou para mim! (usando urxvt + screen ou urxvt e até mesmo xterm)

Então, removi o plugin no final.


0

Você também pode tentar 'noesckeys'


0

Eu tive o mesmo problema ao usar o vim dentro do Windows 8.1 com Cygwin.

A solução funcionou para mim, basta executar o seguinte comando em seu terminal Cygwin:

cp vimrc_example.vim ~/.vimrc

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.