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?

Josh
fonte
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.)

Brian Agnew
fonte
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.

Han
fonte
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

Alexx Roche
fonte
: 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.

lothar
fonte
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
Stabledog
fonte
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"

Raz
fonte
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

Night5talker
fonte
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.

errordeveloper
fonte
0

Você também pode tentar 'noesckeys'


fonte
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
noufal
fonte
-1

Na linha de comando, escreva:

EXINIT="set nocompatible"; export EXINIT
Soheil
fonte
1
adicione uma (curta) descrição de sua solução
Raidri oferece suporte a Monica