Premendo i tasti freccia si aggiungono caratteri nell'editor vi


188

Quando ho provato a usare i tasti freccia in modalità di inserimento vinell'editor, i seguenti caratteri sono stati inseriti nell'editor:

  • perché ottengo B,
  • perché ottengo A,
  • perché ottengo D,
  • perché ottengo C.

Aiutatemi a risolvere questo problema.


3
Mi sono fatta una bella risata leggendo il titolo;) Sono sicuro che esiste un XKCD per la sensazione spettrale che arriva (agli utenti inesperti) quando il tasto freccia stampa le lettere.
vvy

1
È molto spaventoso;)
Kyle Bridenstine il

Risposte:


233

Se non hai già un .vimrcfile nella tua home directory, creane uno usando questo:

vim ~/.vimrc

Aggiungi questa riga all'inizio del file:

set nocompatible

Salva il file e questo dovrebbe risolvere il problema per te. :)


1
Ho dovuto creare un file .exrc per vi, ma impostare nocompatible ha funzionato alla grande.
tgun926,

25
C'è un trucco se usi viinvece di vim, devi fare la stessa configurazione ma nel ~/.exrcfile.
Tzi,

15
Lavorato. Ma perché è necessaria questa correzione? Perché di default non gestisce le frecce?
Mohit,

6
Per impostazione predefinita, vi / vim è programmato per sostituire i tasti freccia con i tasti h, j, k, l. Questo viene fatto in modo da non doverti spostare dall'area principale della tastiera.
Gaurav Manchanda,

10
il prossimo problema è backspace, soluzione: askubuntu.com/questions/296385/…
daVe,

87

Installa vim -> Questo risolverà il problema.

sudo apt-get install vim

Esistono molti buoni tutorial su vim / vi su YouTube o sul Web in generale. Per il tuo problema, vedi qui

Quindi continua ad aprire i file come al solito :

vi desired-file

ha funzionato per me - anche se non sono sicuro del perché sia ​​diverso da quello che stavo lanciando in precedenza
Amos Folarin

6
Questa dovrebbe essere la risposta accettata (ma sembra che nessuno stia accettando). è il modo più semplice / pulito per ottenere vim completamente "modernizzato" su una console di computer (invece dei terminali dell'era tty / ANSI.
Lockszmith

sì, sono d'accordo con te Lockzsmith, questa dovrebbe essere la risposta accettata
niccolo m.

Questo ha funzionato per me. Sono sorpreso che Raspian arrivi con la versione di vi / vim che fa ... anche se tutti i tutorial per questo ti dicono di usare nano, il che è difficile sostenere che Vim sia davvero migliore di esso. Probabilmente l'unica ragione per cui uso vim piuttosto che nano è perché vim è sempre su ogni macchina e sembra una probabilità del 50/50 se nano sia.
ArtOfWarfare il

COMPUTER BLEEPIN!
Chris

27

Con vi, quando si fa clic su isi attiva il comando per inserire il testo.
Questo comando ti consente di inserire del testo nel tuo file.
E a destra, quando si fa clic:

  • su di esso inserirà una "A",
  • su di esso inserirà una "B",
  • ...

Finché non disattivi questo comando.
Per disattivare un comando in vi: basta fare clic su Esc
E poi si tornerà al normale utilizzo dei tasti freccia:

  • salire,
  • andare giù,
  • ...

Cordiali saluti, ecco alcuni vicomandi:
da questa fonte .

:xReturn uscire da vi , scrivere il file modificato nel file chiamato nell'invocazione originale
:wqReturn uscire da vi , scrivere il file modificato nel file chiamato nell'invocazione originale
:qReturn uscire (o uscire) vi
:q!Return uscire da vi anche se le ultime modifiche non sono state salvate per questa chiamata vi

sposta il cursore in basso di una riga
sposta il cursore in alto di una riga
sposta il cursore a sinistra di un carattere
sposta il cursore a destra di un carattere

u annulla qualunque cosa tu abbia appena fatto; un semplice toggle
. redo qualunque cosa tu abbia appena fatto

i inserire testo prima del cursore, fino Eschit
I inserto testo all'inizio della riga corrente, fino Eschit
a accodare testo dopo il cursore, fino Eschit
A aggiungere testo alla fine della riga corrente, fino Esccolpito
o aperta e inserire il testo in una nuova linea sotto la linea di corrente, fino Esccolpito
O aperto e inserisci il testo in una nuova riga sopra la riga corrente, fino a quando non viene Escpremuto

r sostituisci singolo carattere sotto il cursore (non Escnecessario)
cw cambia la parola corrente con un nuovo testo, iniziando con il carattere sotto il cursore, fino a quando Escpremi
x cancella singolo carattere sotto il cursore
Nx elimina N caratteri, iniziando con il carattere sotto il cursore
dw elimina la singola parola che inizia con il carattere sotto il cursore
C cambia (sostituisci) i caratteri nella riga corrente, fino a quando Escpremi
D cancella il resto della riga, iniziando dalla posizione corrente del cursore

dd elimina l' intera riga corrente
Ndd elimina N righe, iniziando dalla riga corrente; ad es. 5dd cancella 5 righe
yy copia (yank, cut) la riga corrente nel buffer
Nyy copia (yank, cut) le successive N line, inclusa la riga corrente, nel buffer
p incolla le righe nel buffer nel testo dopo la linea corrente

0(zero) sposta il cursore all'inizio della riga corrente (quella con il cursore)
$ sposta il cursore alla fine della riga corrente
w sposta il cursore all'inizio della parola successiva
b sposta il cursore indietro all'inizio della parola precedente
:0Returno 1G sposta il cursore sulla prima riga del file
:nReturno nG sposta il cursore per allineare n
:$Returno G spostare il cursore sull'ultima riga nel file

/string cerca in avanti la ricorrenza della stringa nel testo
?string cerca indietro la ricorrenza della stringa nel testo
n passa alla ricorrenza successiva della stringa di ricerca
N sposta alla ricorrenza successiva della stringa di ricerca nella direzione opposta


28
Il tasto freccia giù che inserisce "B" non è un comportamento previsto. I tasti freccia dovrebbero spostare i cursori su e giù / sinistra e destra indipendentemente dalla modalità di inserimento.
James Wong,

2
@JamesWong In realtà, si tratta di un comportamento previsto, poiché è così che Vi era originariamente programmato. VIM, (ufficiosamente) il successore di Vi, è in modalità Vi compatibile per impostazione predefinita, che include questo comportamento per i tasti freccia. Quindi la parola "dovrebbe" qui è puramente soggettiva, poiché VIM sta effettivamente facendo ciò che è stato programmato appositamente per fare.
villapx,

2
@villapx - No, non è un comportamento previsto. Il comportamento previsto è definito da ciò che l'utente tipico si aspetta. La persona tipica che usa vi / vim lo sta usando perché è quello che è installato su un server che deve configurare rapidamente e non farà abbastanza per preoccuparsi di installare qualcos'altro. Pochi in realtà scelgono di usare vim quando viene data un'opzione, e in realtà meno conoscono tutte queste funzionalità o stranezze. L'utente tipico si aspetta che le frecce spostino il cursore, ovvero il comportamento previsto. Qualcos'altro è un comportamento inaspettato e dovrebbe essere scritto come un bug per quanto inaspettato.
ArtOfWarfare il

@ArtOfWarfare Sei libero di definire "previsto" come preferisci. Lo sto definendo come previsto dall'autore del codice, poiché nel manuale VIM erano abbastanza chiari come dovrebbe comportarsi questo ... da :help compatible: "Per impostazione predefinita questa opzione è attiva e le impostazioni predefinite di Vi sono utilizzate per opzioni. Questa impostazione predefinita è stata scelta per quelle persone che vogliono usare Vim proprio come Vi e nemmeno (vogliono) conoscere l'opzione "compatibile". "
villapx,

@ArtOfWarfare Fondamentalmente, l'autore di VIM aveva chiaramente in mente un pubblico specifico quando scriveva questa parte del codice, e solo perché quel pubblico è diverso da quello che sarebbe il tuo pubblico, non significa che sia un bug. Puoi archiviarlo come un bug se lo desideri, ma preparati a essere rimproverato dai fondamentalisti VIM (e in realtà chiunque rispetti il ​​"manuale", a la RTFM aficionados).
villapx,

17

Per disabilitare la stampa di lettere premendo le frecce in modalità modifica è possibile effettuare le seguenti operazioni

vi $HOME/.exrc 

(crea il file se non esiste), quindi aggiungi una riga set nocompatiblee salva.


L'ho messo in .vimrc. Perché lo metti in .exrc?
pauljohn32,

Sorgenti Vim entrambe: vedere l'output di :versionper l'ordine di caricamento (anche :h .exrco :h init). Suppongo che qualcuno potrebbe voler applicare un'impostazione sia in vi che in vim, o potrebbe essere pura forza dell'abitudine.
William Robertson,

11

Ci sono tre modalità nell'editor vi e precisamente:

  • modalità di comando
  • Modalità di immissione
  • modalità di default.

Quando si apre un file, ci si trova in modalità predefinita. Ora, se si vuole andare a una posizione specifica nel testo, basta usare i tasti freccia o l'uso h, j, k, lchiavi. Si noti che questo avrebbe funzionato solo quando non si è premuto i(o qualsiasi altra modalità di ingresso entrare comando come a, A, I).

Il motivo di "B" potrebbe essere dovuto al fatto che i tasti freccia in modalità di input non funzionano come tasti freccia, quindi è sufficiente premere Escper passare alla modalità predefinita in qualsiasi momento. Quando per passare alla modalità di ingresso premere io a, e per navigare basta premere itasti chiave ed uso freccia o h, j, k, l.


7

Ho avuto lo stesso identico problema, ma non solo sulla mia macchina locale ma anche sulle connessioni tramite mastice su una macchina sles in una macchina virtuale Win7 su un ricevitore citrix. Sia l'host locale che quello remoto mostrano che una reinstallazione di Ubuntu ha avuto lo stesso identico problema.

Dopo averlo scoperto

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

Causa questo strano comportamento VI Ho installato il pacchetto console-data che risolve il problema!

sudo apt-get install console-data

3

Nota:

Ci sono buone informazioni negli altri post, ma nessuno dei post ha cercato di spiegare perché questo comportamento si è verificato. Molte persone sono destinate a inciampare su questo in futuro. Inoltre, potresti contrassegnare questa domanda come risolta dal momento che uno dei post precedenti probabilmente ti ha aiutato?


Ecco una spiegazione :

Vi è un editor che esiste da molto tempo, con origini risalenti ai sistemi Unix. È un buon strumento ma è stato ripetuto e ora c'è di meglio. Vim è stato scritto più tardi ed è quella iterazione. Le persone comunemente si riferiscono a vi come 'vim-minimal' e a vim è una versione "migliorata" di vi. Puoi pensarlo in questo modo: vi è il core e vim si espande su di esso.

Probabile come hai scoperto il comportamento :

Affinché tu abbia scoperto questo problema, hai premuto " i " per entrare nella modalità di inserimento e poi hai usato i tasti freccia per navigare sulla linea corretta e modificare il punto. Questo è ciò che ha causato il tuo problema di carattere imprevisto.

Soluzione 1 o 2

1) vi someFileDurante l'utilizzo di vi , passare prima al punto di modifica, quindi accedere alla modalità di inserimento.

2) vim someFileBasta usare vim dall'inizio.

Non posso sottolineare abbastanza per leggere il manuale (pagine man) o usare -h come aiuto. Una volta che ti sei adattato ai modelli nella shell, le pagine man diventano il tuo migliore amico. Esempio: man vioman vim


Convalida che Vim è installato .

Apri una finestra della console ed esegui:

dpkg --list | grep vim

Se ottieni qualcosa di simile a questo, puoi semplicemente iniziare a usare 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 il prompt dei comandi non restituisce nulla, vim is non è installato. Utilizzare gli esempi seguenti per aggiornare i propri repository e quindi installare vim.

sudo apt-get update
sudo apt-get install vim

Nel caso in cui usi vi o vim solo quando cerchi su Internet come risolvere qualcosa e ti capita di dimenticare di scrivere vim, c'è un modo per risolverlo in futuro. Ti consiglio di prestare attenzione. È possibile utilizzare un alias per sovrascrivere vi con un riferimento a VIM in modo che, indipendentemente da ciò che si digita nel raro futuro, si ottenga VIM senza che "oops!" momento. Puoi sempre eliminare un alias in un secondo momento.

Tipo vim .bashrc. Spostati verso il basso sulla riga vuota con solo un ~(o su qualsiasi altra riga che inizia con alias(quindi sono raggruppati insieme) e quindi premi il tasto i per accedere alla modalità -inserimento-. Nella sua riga separata, inserisci quanto segue:

alias vi='vim'

Premere Esce quindi digitare :wq. Ora devi ricaricare il file. Tipo source .bashrcQualsiasi altra shell che si apre dopo aver effettuato queste modifiche caricherà automaticamente il file .bashrc.


3

Tutte le spiegazioni fornite sono un po 'bizzarre. Ho installato vi ma non vim.

Verifica delle alternative: /etc/alternatives/vi/usr/bin/vim.tiny

Così viè vim.tinye usa /etc/vim/vimrc.tiny.

E in vimrc.tinyte trovi la seguente riga:

set compatible

Che è quasi l'unica cosa in questo file. Si noti che in /etc/vim/vimrcesso sta usando nocompatible.

Quindi installa vim o modifica il vimrc.tinyfile o creane uno tuo ~/.vimrcche dovrebbe contenere la riga:

set nocompatible

1
Non sono sicuro di cosa sia così bizzarro. Si finisce per suggerire 1. installare Vim - askubuntu.com/a/220072/158442 , 2. creare ~/.vimrce impostare nocompatible: askubuntu.com/a/353944/158442 o 3. modificare un file di sistema. Solo il suggerimento da modificare /etc/vim/vimrc.tinyè nuovo, eppure chiamate risposte bizzarre mentre suggerite la stessa cosa.
Muru,

1

L'editor vi tradizionale non riconosce i tasti freccia (... inavvertitamente). Esistono due soluzioni:

  1. usa vim invece di vi
  2. usa h, j, kel per navigare (non puoi navigare durante la modifica sul vi btw tradizionale.)

Questo non è vero. Cerca le app basate su terminfo / termcap e libcurses. Uso vi dal 1990 in Xenix, SCO Unix, AIX, vecchio hpux e altri, e pure-vi degli anni '80 supporta già le mappature terminfo / termcap.
Luciano,

@ James-wong bene, allora dovrei riformulare la mia risposta. A "puro vi sotto Ubuntu non ..."
MadMike

... e questo intendeva un commento a @luciano
MadMike il

1

Questo può anche essere dovuto alla TERMvariabile; impostalo ad esempio in questo modo:

 export TERM=xterm

Ciò ha risolto il problema per me, mentre le altre risposte no. Grazie!
Greg

1

Su alcuni sistemi, l' nocompatibleopzione non è disponibile o potrebbe non risolvere il problema se un plugin interrompe la funzionalità del tasto freccia. Ecco una soluzione alternativa ...

Modifica il .exrcfile per includere le seguenti righe:

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

In alternativa, se il problema esiste solo in modalità normale, è possibile modificare nmape saltare quanto segue a, come segue:

nmap! ^[OA ^[k

e così via.

Ecco le combinazioni di tasti necessarie per produrle (mostrandone solo la prima):

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

Ciò sfugge alla modalità di modifica, si sposta nella direzione desiderata e rientra nella modalità di modifica. Questo è necessario per superare Vi che legge la sequenza di escape come una sequenza di <ESC> <O> <A>, ecc.

Fonte: https://hea-www.harvard.edu/~fine/Tech/vi.html


1

Per VI creare o modificare il file "~ / .exrc" o VIM creare o modificare il file "~ / .vimrc" impostare o aggiungere nella riga.

set nocompatible

Al momento in cui scrivo ci sono elogi per il secondo argomento più votato che si chiedono perché la loro partecipazione non sia stata accettata. Il motivo è che ci sono host che non consentono l'installazione di altri editor. Anche allora a volte vim ha gli stessi effetti, quindi ci sono un sacco di informazioni utilizzabili dalle prime due voci. Non posso commentare, tuttavia spero che questo chiarisca i motivi per cui nessuno dei due è corretto al 100% il 100% delle volte.


0

Su questa macchina ho dovuto make sureche

set nocompatible

è il last entry in ~/.vimrc. O almeno una delle ultime voci, in particolare non viene caricato più plug-in in seguito.

HTH


0

Per qualche ragione, Ubuntu ha omesso di inizializzare envvar HOME per l'utente root sul mio nuovo 18.04 VPS. In tal caso, non è possibile trovare il file .vimrc. Il problema non si verifica per gli utenti normali (in / home /).

Per controllare la variabile:

echo $HOME

Se ciò si traduce in una riga vuota, la variabile non viene impostata. Il problema è andato via dopo

export HOME=/root

Ho spostato il comando nel file /root/.bashrc (non so dove sia impostato di solito).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.