Durch Drücken der Pfeiltasten werden Zeichen im vi-Editor hinzugefügt

190

Als ich im viEditor versuchte, die Pfeiltasten im Einfügemodus zu verwenden, wurden die folgenden Zeichen in den Editor eingefügt:

  • denn ich bekomme B,
  • denn ich bekomme A,
  • denn ich bekomme D,
  • denn ich bekomme C.

Bitte helfen Sie mir bei der Lösung dieses Problems.

bvb
quelle
3
Ich hatte viel Spaß beim Lesen des Titels;) Ich bin sicher, es gibt eine XKCD für das gespenstische Gefühl, das (für Anfänger) entsteht, wenn die Pfeiltaste Buchstaben druckt.
Vvy
2
Es ist sehr, sehr beängstigend;)
Kyle Bridenstine

Antworten:

233

Wenn Sie noch keine .vimrcDatei in Ihrem Ausgangsverzeichnis haben, erstellen Sie eine davon:

vim ~/.vimrc

Fügen Sie diese Zeile oben in die Datei ein:

set nocompatible

Speichern Sie die Datei und dies sollte das Problem für Sie beheben. :)

Gaurav Manchanda
quelle
1
Ich musste eine .exrc-Datei für vi erstellen, aber set nocompatible hat super funktioniert.
tgun926
25
Es gibt einen Trick, wenn Sie vianstelle von verwenden vim, müssen Sie die gleiche Konfiguration vornehmen, aber in der ~/.exrcDatei.
tzi
15
Hat funktioniert. Aber warum ist dieses Update erforderlich? Warum werden standardmäßig keine Pfeile verarbeitet?
Mohit
6
Standardmäßig ist vi / vim so programmiert, dass die Pfeiltasten durch die Tasten h, j, k, l ersetzt werden. Dies geschieht, damit Sie sich nicht vom Haupttastenbereich der Tastatur entfernen müssen.
Gaurav Manchanda
10
Das nächste Problem ist die Rücktaste
daVe
88

Durch die Installation des vimPakets wird das Problem behoben :

sudo apt-get install vim

Es gibt viele gute vim / vi-Tutorials auf YouTube oder im Internet im Allgemeinen. Informationen zu Ihrem Problem finden Sie im Artikel 8 Grundlegendes zur Navigation in Vim Editor .

Dann öffnen Sie die Dateien wie gewohnt weiter:

vi desired-file
sthysel
quelle
arbeitete für mich - obwohl ich nicht sicher bin, warum dies anders ist als das, was ich zuvor gestartet habe
Amos Folarin
6
Dies sollte die akzeptierte Antwort sein (aber es scheint, als würde niemand akzeptieren).
Dies
ja, ich stimme dir zu, Schlosser, das sollte die akzeptierte Antwort sein
niccolo m.
Das hat bei mir funktioniert. Ich bin überrascht, dass Himbeer mit der Version von vi / vim geliefert wird, die es gibt ... obwohl alle Tutorials dazu sagen, dass Sie Nano verwenden sollen. Es ist schwer zu argumentieren, dass vim wirklich besser ist als es. Wahrscheinlich ist der einzige Grund, warum ich vim anstelle von nano benutze, der, dass vim immer auf jedem Computer installiert ist und es wie eine 50/50-Chance aussieht, ob es nano gibt.
ArtOfWarfare
BLEEPIN 'COMPUTER!
Chris
27

Mit aktivieren Sie vibeim Anklicken iden Befehl zum Einfügen von Text.
Mit diesem Befehl können Sie Text in Ihre Datei einfügen.
Und richtig, beim Klicken:

  • auf sie wird ein „A“ einfügen,
  • auf sie wird ein „B“ einsetzen,
  • ...

Bis Sie diesen Befehl deaktivieren.
So deaktivieren Sie einen Befehl in vi: Klicken Esc
Sie einfach auf . Dann können Sie Ihre Pfeiltasten wieder normal verwenden:

  • hinaufgehen,
  • nach unten gehen,
  • ...

Zu Ihrer Information, hier sind einige viBefehle:
Aus dieser Quelle .

:xReturn beenden vi , geänderte Datei zu schreiben, um Datei in ursprünglichem Aufruf namens
:wqReturn beenden vi , geänderte Datei auszuschreiben in ursprünglichem Aufruf benannt Datei
:qReturn beenden (oder Ausgang) vi
:q!Return vi zu verlassen , obwohl haben letzte Änderungen nicht für diesen vi Anruf gespeichert

Cursor eine Zeile
nach unten bewegen Cursor eine Zeile nach oben
bewegen Cursor ein Zeichen
nach links bewegen Cursor ein Zeichen nach rechts bewegen

u mache rückgängig, was du gerade getan hast; Ein einfaches Umschalten,
. um alles, was Sie gerade getan haben, zu wiederholen

i Einfügen Text vor dem Cursor, bis Eschit
I Insert Text am Anfang der aktuellen Zeile, bis Eschit
a append Text nach Cursor, bis Eschit
A append Text der aktuellen Zeile zu Ende, bis Escgetroffen
o offen und stellt Text in einer neuen Zeile unter dem aktuellen Zeile, bis Escgetroffen
O geöffnet und füge den Text in eine neue Zeile über der aktuellen Zeile ein, bis Escdu darauf drückst

r ersetzen einzelnes Zeichen unter dem Cursor (nicht Escerforderlich)
cw ändert das aktuelle Wort mit neuem Text, mit dem Zeichen unter dem Cursor starten, bis EscTreffer
x löschen einzelnes Zeichen unter Cursor
Nx löschen N Zeichen, mit Zeichen unter Cursor beginnend
dw löscht mit Zeichen unter Cursor das Wort beginnt
C Änderung (ersetzen) , um die Zeichen in der aktuellen Zeile, bis EscTreffer
D löscht den Rest der Leitung, mit aktueller Cursorposition

dd Löschen gesamte aktuelle Zeile
Ndd löschen N Zeilen mit der gegenwärtigen Zeile beginnt; Beispiel: 5dd löscht 5 Zeilen.
yy Kopieren Sie die aktuelle Zeile in den Puffer.
Nyy Kopieren Sie die nächsten N Zeilen einschließlich der aktuellen Zeile in den Puffer.
p Fügen Sie die Zeilen im Puffer in den Text ein die aktuelle Zeile

0(Null) bewegen Cursor auf der aktuellen Zeile zu beginnen (die mit dem Cursor) zu
$ bewegen Cursor an das Ende der aktuellen Zeile
w bewegen Cursor an den Anfang des nächsten Wortes
b bewegen Cursor zurück zum Anfang des Wortes vorhergehenden
:0Returnoder 1G bewegen Cursor auf erste Zeile in der Datei
:nReturnoder nG bewegen Cursor in Zeile n
:$Returnoder Cursor in die letzte Zeile der Datei G bewegen

/string Suche nach vorn für das Auftreten von Zeichenfolge in
?string Textsuche rückwärts für das Auftreten von Zeichenfolge in Text
n bewegt zum nächsten Auftreten von Suchzeichenfolge
N bewegt zum nächsten Auftreten von Suchzeichenfolge in entgegengesetzter Richtung

Boris
quelle
28
Das Einfügen von "B" mit gedrückter Pfeiltaste ist nicht zu erwarten. Die Pfeiltasten sollten die Cursor unabhängig vom Einfügemodus nach oben und unten / links und rechts bewegen.
James Wong
2
@JamesWong Eigentlich ist das Verhalten zu erwarten, da Vi ursprünglich so programmiert wurde. VIM, (inoffiziell) der Nachfolger von Vi, befindet sich standardmäßig im Vi-kompatiblen Modus, der dieses Verhalten für die Pfeiltasten enthält. Das Wort "sollte" ist hier also nur subjektiv, da VIM tatsächlich das tut, wofür es absichtlich programmiert wurde.
villapx
2
@villapx - Nein, es wird kein Verhalten erwartet. Das erwartete Verhalten wird durch die Erwartungen des typischen Benutzers definiert. Die typische Person, die vi / vim verwendet, verwendet es, weil es auf einem Server installiert ist, den sie schnell konfigurieren müssen, und sie werden nicht genug tun, um sich mit der Installation von etwas anderem zu beschäftigen. Nur wenige entscheiden sich für die Verwendung von vim, wenn ihnen eine Option zur Verfügung steht, und weniger kennen tatsächlich alle diese Funktionen oder Besonderheiten. Der typische Benutzer erwartet, dass Pfeile den Cursor bewegen - das ist das erwartete Verhalten. Alles andere ist ein unerwartetes Verhalten und sollte als Fehler beschrieben werden, wie unerwartet es ist.
ArtOfWarfare
@ArtOfWarfare Sie können "erwartet" nach Belieben definieren. Ich definiere es als das, was vom Autor des Codes erwartet wird, da im VIM - Handbuch ziemlich klar war, wie sich dies verhalten soll ... von :help compatible: "Standardmäßig ist diese Option aktiviert und die Vi - Standardeinstellungen werden für das verwendet Diese Standardeinstellung wurde für diejenigen Benutzer ausgewählt, die Vim genau wie Vi verwenden möchten und nicht einmal über die "kompatible" Option informiert sind (wollen). "
villapx
@ArtOfWarfare Grundsätzlich hatte der VIM-Autor ein bestimmtes Publikum im Sinn, als er diesen Teil des Codes schrieb, und nur weil dieses Publikum sich von dem unterscheidet, was Ihr Publikum sein würde, heißt das nicht, dass es ein Fehler ist. Sie können es als Fehler melden, wenn Sie möchten, aber seien Sie darauf vorbereitet, von VIM-Fundamentalisten (und wirklich jedem, der das "Handbuch" respektiert, ein RTFM-Fan) beschimpft zu werden.
villapx
17

Um das Drucken von Buchstaben beim Drücken von Pfeilen im Bearbeitungsmodus zu deaktivieren, haben Sie folgende Möglichkeiten

vi $HOME/.exrc 

(Datei erstellen, falls nicht vorhanden) und Zeile hinzufügen set nocompatibleund speichern.

Aniket Thakur
quelle
Ich habe das in .vimrc geschrieben. Warum steckst du es in .exrc?
Pauljohn32
Vim erzeugt beides - siehe Ausgabe von :versionfür Ladereihenfolge (auch :h .exrcoder :h init). Ich nehme an, jemand möchte, dass eine Einstellung sowohl in vi als auch in vim angewendet wird, oder er könnte eine bloße Gewohnheit sein.
William Robertson
11

Es gibt drei Modi im vi-Editor, nämlich:

  • Befehlsmodus
  • Eingabemodus
  • Standardmodus.

Wenn Sie eine Datei öffnen, befinden Sie sich im Standardmodus. Nun , wenn Sie möchten , eine bestimmte Position im Text zu gehen, verwenden Sie einfach die Pfeiltasten oder die Nutzung h, j, k, lTasten. Beachten Sie, dass dies nur funktionieren würde , wenn Sie nicht gedrückt haben i(oder ein anderer Eingabemodus Eingabe Befehl wie a, A, I).

Der Grund für 'B' kann sein, dass die Pfeiltasten im Eingabemodus nicht als Pfeiltasten fungieren. Drücken Sie also Esc, um jederzeit in den Standardmodus zu wechseln. Wenn in dem Eingabemodus drücken verschieben ioder a, und zu navigieren drücken Sie einfach iTaste und mit den Pfeiltasten oder h, j, k, l.

ps_cool
quelle
7

Ich hatte genau das gleiche Problem, aber nicht nur auf meinem lokalen Rechner, sondern auch bei Verbindungen über Putty auf einem Sles-Rechner in einer Win7-VM über einen Citrix-Empfänger. Sowohl der lokale Host als auch die Remote-Hosts zeigten nach einer Neuinstallation von Ubuntu genau das gleiche Problem.

Nachdem ich das herausgefunden habe

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

Verursacht dieses seltsame VI-Verhalten Ich habe das Paket console-data installiert, das das Problem behebt!

sudo apt-get install console-data
kitingChris
quelle
3

Hinweis:

Es gibt gute Informationen in den anderen Beiträgen, aber keiner der Beiträge versuchte zu erklären, warum dieses Verhalten passiert ist. Viele Menschen müssen in Zukunft darüber stolpern. Könnten Sie diese Frage auch als gelöst markieren, da Ihnen wahrscheinlich einer der vorherigen Beiträge geholfen hat?


Hier ist eine Erklärung :

Vi ist ein Editor, der schon lange existiert und auf die Unix-Systeme zurückgeht. Es ist ein gutes Tool, aber es wurde wiederholt und jetzt gibt es ein besseres. Vim wurde später geschrieben und ist diese Iteration. Die Leute bezeichnen vi allgemein als 'vim-minimal' und vim ist eine "verbesserte" Version von vi. Sie können sich das so vorstellen: vi ist der Kern und vim erweitert es.

Wahrscheinlich haben Sie das Verhalten entdeckt :

Damit Sie dieses Problem entdeckt haben, haben Sie " i " gedrückt , um in den Einfügemodus zu wechseln, und anschließend mit den Pfeiltasten die richtige Linie und den richtigen Bearbeitungspunkt gesucht. Dies ist der Grund für Ihr unerwartetes Zeichenproblem.

Lösung 1 oder 2

1) vi someFileGehen Sie bei Verwendung von vi zuerst zum Bearbeitungspunkt und rufen Sie dann den Einfügemodus auf.

2) vim someFileBenutze einfach vim von Anfang an.

Ich kann nicht genug betonen, um das Handbuch (Manpages) zu lesen oder -h als Hilfe zu verwenden. Sobald Sie sich an die Muster in der Shell gewöhnt haben, werden Manpages zu Ihrem besten Freund. Beispiel: man vioderman vim


Überprüfen Sie, ob Vim installiert ist .

Öffne ein Konsolenfenster und führe aus:

dpkg --list | grep vim

Wenn Sie etwas Ähnliches erhalten, können Sie einfach anfangen, vim zu verwenden.

~ $ 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

Wenn die Eingabeaufforderung nichts anzeigt, ist vim nicht installiert. Verwenden Sie die folgenden Beispiele, um Ihre Repositorys zu aktualisieren und anschließend vim zu installieren.

sudo apt-get update
sudo apt-get install vim

Wenn Sie vi oder vim nur verwenden, wenn Sie im Internet nach Lösungen suchen und vergessen, Eingaben zu machen vim, gibt es eine Möglichkeit, diese für die Zukunft zu beheben. Ich warne Sie, aufmerksam zu sein. Sie können einen Alias ​​verwenden, um vi mit einem Verweis auf vim zu überschreiben, sodass Sie vim unabhängig davon, was Sie in der seltenen Zukunft eingeben, ohne dieses "oops!" Moment. Sie können einen Alias ​​später jederzeit löschen.

Typ vim .bashrc. Gehen Sie in die leere Zeile mit nur einem ~(oder einer anderen Zeile, die mit einem beginnt alias(also zusammen gruppiert ist) und drücken Sie dann die Taste i, um in den Einfügemodus zu wechseln. Geben Sie in einer eigenen separaten Zeile Folgendes ein:

alias vi='vim'

Drücken Sie Escund geben Sie dann ein :wq. Jetzt müssen Sie die Datei neu laden. Typ source .bashrcJede andere Shell, die nach diesen Änderungen geöffnet wird, lädt automatisch die .bashrc-Datei.

D75
quelle
3

Alle Erklärungen sind etwas bizarr. Ich habe vi aber nicht vim installiert.

Alternativen prüfen: /etc/alternatives/vi/usr/bin/vim.tiny

So viist es vim.tiny, und es nutzt /etc/vim/vimrc.tiny.

Und in vimrc.tinyder folgenden Zeile finden Sie:

set compatible

Welches ist fast das einzige, was in dieser Datei. Beachten Sie, dass in /etc/vim/vimrces verwendet wird nocompatible.

Installieren Sie also entweder vim oder ändern Sie die vimrc.tinyDatei oder erstellen Sie eine eigene, ~/.vimrcdie die folgende Zeile enthalten sollte:

set nocompatible
Gunstick
quelle
1
Ich bin mir nicht sicher, was so bizarr ist. Am Ende haben Sie was darauf hindeutet , 1. Vim installieren - askubuntu.com/a/220072/158442 , 2. Erstellung ~/.vimrcund Einstellung nocompatible: askubuntu.com/a/353944/158442 oder 3. eine Systemdatei bearbeiten. Nur der zu bearbeitende Vorschlag /etc/vim/vimrc.tinyist neu, und dennoch nennen Sie Antworten bizarr, während Sie dasselbe vorschlagen wie sie.
muru
1

Der traditionelle vi-Editor erkennt die Pfeiltasten nicht (... afair). Es gibt zwei Lösungen:

  1. benutze vim anstelle von vi
  2. benutze h, j, k und l um zu navigieren (du kannst nicht navigieren, während du auf dem traditionellen vi btw bearbeitest.)
MadMike
quelle
Das stimmt nicht. Suchen Sie nach terminfo / termcap- und libcurses-basierten Apps. Ich benutze vi seit 1990 in Xenix, SCO Unix, AIX, altem HPux und anderen und pure-vi aus den 80ern unterstützt bereits terminfo / termcap-Zuordnungen.
Luciano
@ James-Wong Nun, dann sollte ich meine Antwort umformulieren. Zu "pure vi unter Ubuntu nicht ..."
MadMike
... und dies war als Kommentar zu @luciano
MadMike
1

Dies kann auch an der TERMVariablen liegen; Setze es zum Beispiel so:

 export TERM=xterm
Jasper Nuyens
quelle
Dies löste das Problem für mich, wo die anderen Antworten nicht. Vielen Dank!
greg
1

Auf einigen Systemen ist die nocompatibleOption nicht verfügbar oder behebt das Problem möglicherweise nicht, wenn ein Plug-in die Pfeiltastenfunktionalität einbricht. Hier ist eine Problemumgehung ...

Bearbeiten Sie die .exrcDatei so, dass sie die folgenden Zeilen enthält:

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

Wenn das Problem nur im normalen Modus auftritt, können Sie wie folgt nmapFolgendes ändern und überspringen a:

nmap! ^[OA ^[k

und so weiter.

Hier sind die Tastenkombinationen, die benötigt werden, um sie zu erstellen (nur die erste wird angezeigt):

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

Dies verlässt den Bearbeitungsmodus, bewegt sich in die gewünschte Richtung und wechselt wieder in den Bearbeitungsmodus. Dies ist erforderlich, um zu vermeiden, dass Vi die Escape-Sequenz als Folge von <ESC> <O> <A> usw. liest.

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

Dominic Comtois
quelle
1

Für VI erstellen oder bearbeiten Sie die Datei "~ / .exrc" oder VIM erstellen oder bearbeiten Sie die Datei "~ / .vimrc" und fügen Sie sie in die Zeile ein.

set nocompatible

Zum Zeitpunkt des Schreibens dieses Artikels gibt es zu dem am zweithäufigsten gestimmten Punkt Lob, die sich fragen, warum ihr Beitrag nicht angenommen wurde. Der Grund ist, dass es Hosts gibt, die die Installation anderer Editoren nicht zulassen. Sogar dann hat vim manchmal die gleichen Auswirkungen, so dass es eine Reihe von nützlichen Informationen aus den beiden obersten Einträgen gibt. Ich kann dies jedoch hoffentlich nicht kommentieren, um Gründe dafür zu klären, warum keines der beiden 100% ig richtig ist.

tuxdalinuxpenguin
quelle
0

Auf dieser Maschine musste ich make suredas

set nocompatible

ist die last entry in ~/.vimrc. Oder es wird mindestens einer der letzten Einträge, insbesondere kein Plugin mehr nachgeladen.

HTH

Gen.Stack
quelle
0

Aus irgendeinem Grund hat Ubuntu auf die Initialisierung von envvar HOME für den Benutzer root auf meinem neuen 18.04 VPS verzichtet. In diesem Fall kann vi die .vimrc-Datei nicht finden. Das Problem tritt bei normalen Benutzern (in / home /) nicht auf.

So überprüfen Sie die Variable:

echo $HOME

Wenn dies zu einer Leerzeile führt, wird die Variable nicht gesetzt. Das Problem ging nach

export HOME=/root

Ich habe den Befehl in die Datei /root/.bashrc verschoben (ich weiß nicht, wo dies normalerweise eingestellt ist).

Erik
quelle