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?
@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.)
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.
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
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
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)
Respostas:
Presumo que você esteja usando o vim, pois ele está marcado como Linux. Experimentar:
(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 $HOME
para verificar o caminho do diretório inicial.)fonte
vim
e nãovi
. A maioria dos recursos avançados e úteis dovim
são desabilitados por padrão, a menos que você inicie comvim
.set nocompatible
em sua própria linha no .vimrcUbuntu vem com
vim-tiny
, que não tem todos os recursos que o vim tem.Faça um rápido
sudo apt-get install vim
para obter todos os recursos interessantes de que todos estão falando.fonte
: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
fonte
:set term=builtin_ansi
trabalhou para mim.:set term=xterm
nao fiz.export TERM=xterm
na linha de comando antes de invocar o vi e então:set term=xterm
no vim 7.2 funciona para mimvi 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.
fonte
vi
evim
. Mas na minha caixavim
imprimecommand not found
: D:set term=ansi
trabalhou para mim, obrigado Raz . você diz que 'não suporta'. Eu estou me perguntando se você disse isso porque ovim-tiny
pacote do ubuntu -Estou usando- é diferente do vanillavi
ou a configuração de termos funcionaria nisso também?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:
fonte
A única coisa que funcionou para mim foi ": set term = ansi"
fonte
vi
no windows ou no ubuntu? :)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 backspacefonte
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.
fonte
Você também pode tentar 'noesckeys'
fonte
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:
fonte
Na linha de comando, escreva:
fonte