Vraag Als u pijltjestoetsen gebruikt, voegt u tekens toe in de vi-editor


Toen ik probeerde de pijltoetsen in de invoegmodus in te gebruiken vi editor de volgende tekens worden ingevoegd in de editor:

  • voor  Ik krijg B,
  • voor  Ik krijg een,
  • voor  Ik krijg D,
  • voor  Ik krijg C.

Help me alstublieft om dit probleem op te lossen.


143
2017-10-05 05:04


oorsprong


Ik heb goed gelachen met het lezen van de titel;) Ik weet zeker dat er een XKCD is voor het spookachtige gevoel dat komt (voor beginnende gebruikers) wanneer de pijltjestoets letters afdrukt. - vvy


antwoorden:


Als u nog geen .vimrc bestand in uw homedirectory, maak er een aan met behulp van deze:

vim ~/.vimrc

Voeg deze regel toe aan de bovenkant van het bestand:

set nocompatible

Sla het bestand op en dit zou het probleem voor u moeten oplossen. :)


177
2017-10-05 07:23



Ik moest een .exrc-bestand maken voor vi, maar instellen nocompatible werkte prima. - tgun926
Er is een truc als je gebruikt vi in plaats van vim, je moet dezelfde configuratie doen, maar in de ~/.exrc het dossier. - tzi
Werkte. Maar waarom is deze oplossing nodig? Waarom worden standaard geen pijlen verwerkt? - Mohit
Standaard is vi / vim geprogrammeerd om de pijltoetsen te vervangen door de toetsen h, j, k, l. Dit wordt gedaan, zodat u niet hoeft te gaan van het hoofdgebied van het toetsenbord. - Gaurav Manchanda
volgend probleem is backspace, oplossing: askubuntu.com/questions/296385/... - daVe


Installeer vim -> Hiermee wordt het probleem opgelost.

sudo apt-get install vim

Er zijn veel goede vim / vi-tutorials op youtube, of het web in het algemeen. Voor uw probleem, kijk hier

Ga dan verder naar open bestanden zoals gebruikelijk:

vi desired-file

47
2017-11-21 08:03



werkte voor mij - hoewel ik niet zeker weet waarom dit anders is dan de vim die ik eerder had gelanceerd - Amos Folarin
Dit zou het geaccepteerde antwoord moeten zijn (maar het lijkt alsof niemand het accepteert). het is de eenvoudigste / schoonste manier om vim volledig 'gemoderniseerd' te krijgen op een computerconsole (in plaats van tty / ANSI-tijdperk-terminals. - Lockszmith
ja ik ben het met je eens Lockzsmith, dit zou het geaccepteerde antwoord moeten zijn - niccolo m.
Dit werkte voor mij. Het verbaast me dat raspian komt met de versie van vi / vim die het doet ... hoewel alle tutorials ervoor vertellen dat je nano moet gebruiken, wat moeilijk is om te beweren dat vim echt beter is dan het. Waarschijnlijk de enige reden dat ik vim gebruik in plaats van nano is omdat vim altijd op elke machine staat en het lijkt een 50/50 kans of nano is. - ArtOfWarfare


Met vi, wanneer u op klikt ik je activeert de opdracht om invoegen tekst.
Met deze opdracht kunt u tekst in uw bestand invoegen.
En goed, wanneer u klikt:

  • op  het zal een "A" invoegen,
  • op  het zal een "B" invoegen,
  • ...

Tot je deactiveert deze opdracht.
Een opdracht deactiveren in vi : klik gewoon op Esc
En dan krijg je normaal gebruik van je pijltjestoetsen terug:

  •  omhoog gaan,
  •  naar beneden gaan,
  • ...

Ter info, hier zijn wat vi commando's:
Van deze bron.

:xterugkeer  stop met vi, schrijven aangepast bestand naar bestand genoemd in oorspronkelijke aanroep
:wqterugkeer  stop met vi, schrijven aangepast bestand naar bestand genoemd in oorspronkelijke aanroep
:qterugkeer  stoppen (of afsluiten) vi
:q!terugkeer  stop met vi hoewel de laatste wijzigingen niet zijn opgeslagen voor deze vi-oproep

  verhuizing cursor één regel omlaag
  verhuizing cursor één regel omhoog
  verhuizing cursor liet één karakter achter
  verhuizing cursor één teken rechts

u  ongedaan maken wat je net hebt gedaan; een eenvoudige schakelaar
.  opnieuw doen wat je net hebt gedaan

i  invoegen tekst vóór cursor, tot Esc raken
I  invoegen tekst aan het begin van de huidige regel, tot Esc raken
a  toevoegen tekst na cursor, tot Esc raken
A  toevoegen tekst tot einde van huidige regel, tot Esc raken
o  Open en zet tekst in een nieuwe regel onder de huidige regel, tot Esc raken
O  Open en zet tekst in een nieuwe regel boven de huidige regel, tot Esc raken

r  vervangen enkel teken onder cursor (nr Esc nodig zijn)
cw  verandering het huidige woord met nieuwe tekst, beginnend met het teken onder de cursor, tot Esc raken
x  verwijderen één teken onder cursor
Nx  verwijderen N tekens, beginnend met het teken onder de cursor
dw  verwijderen het enkele woord dat begint met het karakter onder de cursor
C  verandering (vervang) de tekens op de huidige regel, tot Esc raken
D  verwijderen de rest van de regel, beginnend met de huidige cursorpositie

dd  verwijderen gehele huidige regel
Ndd  verwijderen N lijnen, beginnend met de huidige regel; bijv. 5dd verwijdert 5 regels
yy  kopiëren (ruk, knip) de huidige regel in de buffer
Nyy  kopiëren (ruk, knip) de volgende N-regels, inclusief de huidige regel, in de buffer
p  plakkende regel (s) in de buffer in de tekst na de huidige regel

0 (nul) verhuizing cursor naar begin van huidige regel (degene met de cursor)
$  verhuizing cursor tot einde van de huidige regel
w  verhuizing cursor naar het begin van het volgende woord
b  verhuizing cursor terug naar het begin van het vorige woord
:0terugkeer of 1G  verhuizing cursor naar eerste regel in bestand
:nterugkeer of nG  verhuizing cursor naar regel n
:$terugkeer of G  verhuizing cursor naar laatste regel in bestand

/string  zoeken doorsturen voor het voorkomen van tekenreeks in tekst
?string  zoeken achterwaarts voor het voorkomen van tekenreeks in tekst
n  verhuizing naar volgende occurrence van zoekreeks
N  verhuizing naar volgende occurrence van zoekreeks in tegenovergestelde richting


26
2017-10-05 06:52



Pijltjestoets naar beneden invoegen van "B" is geen verwacht gedrag. Pijltoetsen moeten bewegende cursors naar boven en beneden / links en rechts verplaatsen, ongeacht de invoegmodus. - James Wong
@JamesWong Eigenlijk wel is verwacht gedrag, want zo was Vi oorspronkelijk geprogrammeerd. VIM, (onofficieel) de opvolger van Vi, bevindt zich standaard in de Vi-compatibele modus, inclusief dit gedrag voor de pijltoetsen. Dus het woord "zou moeten" hier is slechts subjectief, omdat VIM feitelijk doet wat het doelbewust geprogrammeerd was om te doen. - villapx
@villapx - Nee, het is niet te verwachten gedrag. Verwacht gedrag wordt bepaald door wat uw gemiddelde gebruiker verwacht. De typische persoon die vi / vim gebruikt, gebruikt het omdat dat is wat is geïnstalleerd op een server die ze snel moeten configureren en ze zullen niet genoeg doen om moeite te doen om iets anders te installeren. Weinigen kiezen er eigenlijk voor om vim te gebruiken wanneer ze een optie krijgen, en minder weten eigenlijk al deze functies of eigenaardigheden. De gemiddelde gebruiker verwacht dat pijlen de cursor verplaatsen - dat is het verwachte gedrag. Al het andere is onverwacht gedrag en moet worden geschreven als een bug voor hoe onverwacht het is. - ArtOfWarfare
@ArtOfWarfare U bent vrij om "verwacht" te definiëren, ongeacht uw keuze. Ik definieer het als wat er verwacht wordt door de auteur van de code, want ze waren vrij duidelijk in de VIM-handleiding hoe dit zich zou moeten gedragen ... van :help compatible: "Standaard staat deze optie aan en worden de Vi-standaardinstellingen gebruikt voor de opties Deze standaard is gekozen voor mensen die Vim net als Vi willen gebruiken en niet eens willen (willen) weten over de 'compatibele' optie ." - villapx
@ArtOfWarfare Kort gezegd, de VIM-auteur had duidelijk een specifiek publiek in gedachten bij het schrijven van dit gedeelte van de code, en alleen omdat dat publiek anders is dan wat jouw publiek zou zijn, betekent niet dat het een fout is. Je kunt het als een bug indienen als je dat wilt, maar wees voorbereid door de VIM-fundamentalisten (en eigenlijk iedereen die de 'handleiding' respecteert, a la RTFM-liefhebbers). - villapx


Als u het afdrukken van letters op de pijlen in de bewerkingsmodus wilt uitschakelen, kunt u het volgende doen

vi $HOME/.exrc 

(maak een bestand als het niet bestaat) en voeg vervolgens een regel toe set nocompatible om het te redden en te redden.


16
2017-08-08 12:46



Dit zou het geaccepteerde antwoord moeten zijn. Dank je! - eis
Ik heb dat in .vimrc gezet. Waarom zet je het in .exrc? - pauljohn32
Vim bronnen beide - zie output van :version voor laadvolgorde (ook :h .exrc of :h init). Ik veronderstel dat iemand misschien een instelling wil toepassen in zowel vi als vim, of zou een pure kracht van gewoonte kunnen zijn. - William Robertson


Er zijn drie modi in de vi-editor, namelijk:

  • opdrachtmodus
  • invoer modus
  • standaard modus.

Wanneer u een bestand opent, bevindt u zich in de standaardmodus. Als je nu naar een specifieke positie in je tekst wilt gaan, gebruik dan gewoon de pijltjestoetsen of gebruik h, j, k, l sleutels. Merk op dat dit alleen werkt als u niet hebt gedrukt ik (of een andere invoermodus die een commando zoals invoert een, EEN, ik).

De reden voor 'B' kan zijn dat de pijltoetsen in de invoermodus niet werken als pijltoetsen, dus druk gewoon op Esc om op elk gewenst moment naar de standaardmodus te gaan. Wanneer u naar de invoermodus wilt schakelen, drukt u op ik of eenen om te navigeren drukt u gewoon op ik toets en gebruik de pijltjestoetsen of h, j, k, l.


11
2017-11-21 07:14





Ik had precies hetzelfde probleem, maar niet alleen op mijn lokale computer, maar ook op verbindingen via putty op een sles-machine in een Win7 VM via een citrix-ontvanger. Zowel de lokale host als de externe hosts laten zien nadat een herinstallatie van Ubuntu exact hetzelfde probleem had.

Na het ontdekken van dat

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

Oorzaken dit vreemde VI-gedrag Ik heb de pakketconsole-gegevens geïnstalleerd die het probleem oplossen!

sudo apt-get install console-data

6
2018-01-18 10:53





Alle gegeven uitleg is een beetje bizar. Ik heb vi maar niet VIM geïnstalleerd.

Alternatieven controleren: /etc/alternatives/vi &rechter pijl /usr/bin/vim.tiny

Zo vi is vim.tiny, en het gebruikt /etc/vim/vimrc.tiny.

En in vimrc.tiny je vindt de volgende regel:

set compatible

Dat is bijna het enige in dit bestand. Merk op dat in /etc/vim/vimrc het gebruikt nocompatible.

Dus installeer vim of wijzig het vimrc.tiny bestand, of maak er zelf een ~/.vimrc welke de regel zou moeten bevatten:

set nocompatible

3
2018-01-10 22:11



Ik weet niet zeker wat zo bizar is. U stelt uiteindelijk voor 1. Vim te installeren - askubuntu.com/a/220072/158442, 2. creëren ~/.vimrc en instellen nocompatible: askubuntu.com/a/353944/158442of 3. een systeembestand bewerken. Alleen de suggestie om te bewerken /etc/vim/vimrc.tiny is nieuw en toch noem je antwoorden bizar terwijl je hetzelfde suggereert als hen. - muru


De traditionele vi-editor herkent de pijltoetsen niet (... afgelegen). Er zijn twee oplossingen:

  1. gebruik vim in plaats van vi
  2. gebruik h, j, k en l om te navigeren (je kunt niet navigeren tijdens het bewerken op de traditionele vi btw.)

1
2017-10-05 05:51



Dit is niet waar. Zoek naar apps op basis van terminfo / termcap en libcurses. Ik gebruik vi sinds 1990 in Xenix, SCO Unix, AIX, oude hpux en anderen, en pure-vi uit de jaren 80 hebben al ondersteuning voor terminfo / termcap-toewijzingen. - Luciano
@ james-wong dan moet ik mijn antwoord opnieuw formuleren. Om "pure vi onder Ubuntu niet ..." - MadMike
... en dit was bedoeld als opmerking voor @luciano - MadMike


Notitie:

Er is goede informatie in de andere berichten, maar geen van de berichten probeerde het uit te leggen waarom dit gedrag is gebeurd. Veel mensen zullen hier in de toekomst waarschijnlijk nog over struikelen. Kun je deze vraag ook markeren als opgelost omdat een van de vorige berichten je waarschijnlijk heeft geholpen?


Hier is een uitleg:

Vi is een editor die al een lange tijd bestaat, met roots terug naar de Unix-systemen. Het is een goede tool, maar er is op geherereerd en nu is er beter. Vim werd later geschreven en is die iteratie. Mensen verwijzen gewoonlijk naar vi als 'vim-minimal' en naar vim is een 'verbeterde' versie van vi. Je kunt het zo zien: vi is de kern en vim breidt zich uit.

Waarschijnlijk heeft u het gedrag ontdekt:

Om dit probleem te hebben ontdekt, hebt u op "ikom binnen te gaan invoegen modus en gebruikt vervolgens uw pijltoetsen om door de juiste regel en het juiste bewerkingspunt te navigeren. Dit is de oorzaak van uw onverwachte char-probleem.

Oplossing 1 of 2

1) vi someFile Tijdens het gebruik vi, ga eerst naar het bewerkingspunt en ga vervolgens naar de invoegmodus.

2) vim someFile Gewoon gebruiken vim vanaf het begin.

Ik kan niet genoeg benadrukken om de handleiding (man pages) te lezen of om -h te gebruiken voor hulp. Zodra u zich aanpast aan de patronen in de shell, worden manpagina's uw beste vriend. Voorbeeld: man vi of man vim


Bevestig dat Vim is geïnstalleerd.

Open een consolevenster en voer het uit:

dpkg --list | grep vim

Als je iets soortgelijks krijgt, kun je vim gebruiken.

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

Als de opdrachtprompt zonder resultaat wordt geretourneerd, is vim niet geïnstalleerd. Gebruik de onderstaande voorbeelden om uw opslagplaatsen bij te werken en vim te installeren.

sudo apt-get update
sudo apt-get install vim

Bij toeval dat je vi of vim alleen gebruikt bij het zoeken op het internet om iets te repareren en vergeet je te typen vim, er is een manier om dit voor de toekomst op te lossen. Ik waarschuw u om op te letten. Je kunt een alias gebruiken om vi te overschrijven met een verwijzing naar vim zodat, ongeacht wat je typt in de zeldzame toekomst, je vim krijgt zonder dat "oeps!" moment. Je kunt altijd een alias later verwijderen.

Type vim .bashrc. Ga naar beneden naar de lege regel met alleen a ~ (of naar een andere regel die begint met alias (dus ze zijn gegroepeerd) en druk vervolgens op ik toets om in-invoermodus in te voeren. Voer op een aparte regel het volgende in:

alias vi='vim'

druk op Esc en typ dan :wq. Nu moet je het bestand opnieuw laden. Type source .bashrc Elke andere shell die wordt geopend nadat u deze bewerkingen hebt uitgevoerd, laadt automatisch het .bashrc-bestand.


1
2017-10-30 04:20





Dit kan ook te wijten zijn aan de TERM variable; stel het bijvoorbeeld als volgt:

 export TERM=xterm

1
2017-07-07 13:54



Dit loste het probleem voor mij op waar de andere antwoorden dat niet deden. Bedankt! - greg