Wciśnięcie klawiszy strzałek dodaje znaki w edytorze vi

188

Kiedy próbowałem użyć klawiszy strzałek w trybie wstawiania w viedytorze, w edytorze wstawiane są następujące znaki:

  • dla mam B,
  • dla dostaję,
  • dla mam D,
  • dla mam C.

Proszę o pomoc w rozwiązaniu tego problemu.

bvb
źródło
3
Śmiałem się dobrze czytając tytuł;) Jestem pewien, że istnieje XKCD dla upiornego uczucia, które pojawia się (dla początkujących użytkowników), gdy klawisz strzałki drukuje litery.
vvy
1
To bardzo bardzo przerażające;)
Kyle Bridenstine

Odpowiedzi:

233

Jeśli nie masz jeszcze .vimrcpliku w katalogu domowym, utwórz go, używając tego:

vim ~/.vimrc

Dodaj ten wiersz na górze pliku:

set nocompatible

Zapisz plik, a to powinno rozwiązać problem. :)

Gaurav Manchanda
źródło
1
Musiałem utworzyć plik .exrc dla vi, ale zestaw nocompatible działał świetnie.
tgun926,
25
Istnieje pewna sztuczka, jeśli vizamiast tego vimmusisz wykonać tę samą konfigurację, ale w ~/.exrcpliku.
tzi
15
Pracował Ale dlaczego ta poprawka jest wymagana? Dlaczego domyślnie nie obsługuje strzał?
Mohit
6
Domyślnie vi / vim jest zaprogramowany do zastępowania klawiszy strzałek klawiszami h, j, k, l. Odbywa się to, więc nie musisz przechodzić z głównego obszaru klawiatury.
Gaurav Manchanda
10
kolejnym problemem jest backspace, rozwiązanie: askubuntu.com/questions/296385/…
daVe
87

Zainstaluj vim -> To rozwiąże problem.

sudo apt-get install vim

Istnieje wiele dobrych samouczków vim / vi na youtube lub ogólnie w Internecie. Twój problem znajdziesz tutaj

Następnie kontynuuj otwieranie plików jak zwykle :

vi desired-file
stysel
źródło
pracował dla mnie - choć nie jestem pewien, dlaczego różni się on od vima, który wcześniej uruchamiałem
Amos Folarin
6
To powinna być zaakceptowana odpowiedź (ale wydaje się, że nikt nie akceptuje). to najprostszy / najczystszy sposób na pełne „zmodernizowanie” vima do konsoli komputera (zamiast terminali z czasów tty / ANSI.
Lockszmith
tak, zgadzam się z tobą Lockzsmith, to powinna być zaakceptowana odpowiedź
niccolo m.
To zadziałało dla mnie. Dziwię się, że Raspian jest wyposażony w wersję vi / vim, którą posiada ... chociaż wszystkie samouczki mówią ci o używaniu nano, co trudno argumentować, że vim jest naprawdę lepszy od niego. Prawdopodobnie jedynym powodem, dla którego używam vima zamiast nano, jest to, że vim jest zawsze na każdej maszynie i wydaje się, że nano ma szansę 50/50.
ArtOfWarfare
BLEEPIN 'COMPUTER!
Chris
27

Za pomocą vikliknięcia iaktywujesz polecenie Wstaw tekst.
To polecenie pozwala wstawić tekst do pliku.
I dobrze, po kliknięciu:

  • na nim wstawi się „A”,
  • na nim wstawi się „B”,
  • ...

Do momentu dezaktywacji tego polecenia.
Aby dezaktywować polecenie w vi: po prostu kliknij Esc
A następnie wrócisz do normalnego używania klawiszy strzałek:

  • iść do góry,
  • zejść
  • ...

Do Twojej wiadomości, oto kilka vipoleceń:
Z tego źródła .

:xReturn quit vi , zapisywanie zmodyfikowanego pliku do pliku o nazwie w oryginalnym wywołaniu
:wqReturn quit vi , zapisywanie zmodyfikowanego pliku do pliku o nazwie w oryginalnym wywołaniu
:qReturn quit (lub wyjście) vi
:q!Return quit vi, nawet jeśli dla tego wywołania vi nie zapisano najnowszych zmian

przesuń kursor w dół o jedną linię
przesuń kursor w górę o jedną linię
przesuń kursor w lewo o jeden znak
przesuń kursor w prawo o jeden znak

u cofnij wszystko, co właśnie zrobiłeś; proste przełączanie
. ponów wszystko, co właśnie zrobiłeś

i wstawić tekst przed kursorem, aż Eschit
I wstawiania tekstu na początku bieżącego wiersza, aż Eschit
a dołączyć tekst za kursorem, aż Eschit
A dołączyć tekst do końca bieżącej linii, aż Escuderzył
o otwarty i umieścić tekst w nowej linii poniżej aktualnej linii, aż Eschit
O otwarte i wstaw tekst w nowym wierszu powyżej bieżącego wiersza, aż do Escnaciśnięcia

r zamień pojedynczy znak pod kursorem ( Escniepotrzebny)
cw zmień bieżące słowo na nowy tekst, zaczynając od znaku pod kursorem, aż do Escnaciśnięcia
x usuń pojedynczy znak pod kursorem
Nx usuń N znaków, zaczynając od znaku pod kursorem
dw usuń pojedyncze słowo rozpoczynające się od znaku pod
C zmianą kursora (zamień) znaki w bieżącym wierszu, aż do Escnaciśnięcia
D usuń pozostałą część wiersza, zaczynając od bieżącej pozycji kursora

dd usuń całą bieżącą linię
Ndd usuń N linii, zaczynając od bieżącej linii; np. 5dd usuwa
yy kopię 5 linii (szarpnięcie, wycięcie) bieżącą linię do
Nyy kopii bufora (szarpnięcie, wycięcie) kolejne N linii, w tym bieżąca linia, do bufora
p wklej linię (-y) w buforze do tekstu po bieżąca linia

0(zero) przesuń kursor na początek bieżącej linii (ten z kursorem)
$ przesuń kursor na koniec bieżącej linii
w przesuń kursor na początek następnego słowa
b przesuń kursor z powrotem na początek poprzedniego słowa
:0Returnlub 1G przesuń kursor do pierwszego wiersza w pliku
:nReturnlub nG przesuń kursor do linii n
:$Returnlub G przesuń kursor do ostatniej linii w pliku

/string szukaj do przodu pod kątem występowania łańcucha w tekście
?string szukaj do tyłu pod kątem występowania łańcucha w tekście
n przejdź do następnego wystąpienia łańcucha wyszukiwania
N przejdź do następnego wystąpienia łańcucha wyszukiwania w przeciwnym kierunku

Boris
źródło
28
Strzałka w dół wstawiająca „B” nie jest oczekiwanym zachowaniem. Klawisze strzałek powinny poruszać kursorami w górę iw dół / w lewo i w prawo, niezależnie od trybu wstawiania.
James Wong,
2
@JamesWong Właściwie jest to oczekiwane zachowanie, ponieważ tak pierwotnie zaprogramowano Vi. VIM, (nieoficjalnie) następca Vi, jest domyślnie w trybie kompatybilnym z Vi, co obejmuje takie zachowanie klawiszy strzałek. Zatem słowo „powinno” jest tutaj jedynie subiektywne, ponieważ VIM faktycznie robi to, co zostało celowo zaprogramowane.
villapx,
2
@villapx - Nie, nie jest to oczekiwane zachowanie. Oczekiwane zachowanie jest definiowane przez oczekiwania typowego użytkownika. Typowa osoba używająca vi / vim używa go, ponieważ właśnie to jest zainstalowane na serwerze, który musi szybko skonfigurować i nie zrobi wystarczająco dużo, aby zawracać sobie głowę instalowaniem czegoś innego. Niewielu faktycznie korzysta z vima, gdy ma taką opcję, a mniej faktycznie zna wszystkie te funkcje lub dziwactwa. Typowy użytkownik oczekuje, że strzałki poruszają kursorem - takie jest oczekiwane zachowanie. Wszystko inne jest nieoczekiwanym zachowaniem i powinno być zapisane jako błąd tego, jak nieoczekiwane jest.
ArtOfWarfare
@ArtOfWarfare Możesz dowolnie definiować „oczekiwany”, jakkolwiek wybierzesz. Definiuję go jako oczekiwany przez autora kodu, ponieważ w instrukcji VIM-a było całkiem jasne, jak ma się to zachowywać ... z :help compatible: „Domyślnie ta opcja jest włączona, a domyślne wartości Vi są używane dla opcje. To ustawienie domyślne zostało wybrane dla osób, które chcą używać Vima tak jak Vi, a nawet nie chcą (nie chcą) wiedzieć o opcji „kompatybilnej”. ”
villapx
@ArtOfWarfare Zasadniczo, autor VIM wyraźnie miał konkretnych odbiorców pamiętać podczas pisania tego fragmentu kodu, i tylko dlatego, że publiczność jest inna od tego, co swoją publiczność będzie, nie znaczy, że to błąd. Możesz go zgłosić jako błąd, jeśli chcesz, ale bądź przygotowany na obelgę fundamentalistów VIM (i tak naprawdę każdego, kto szanuje „instrukcję”, miłośników la RTFM).
villapx
17

Aby wyłączyć drukowanie liter po naciśnięciu strzałek w trybie edycji, możesz wykonać następujące czynności

vi $HOME/.exrc 

(utwórz plik, jeśli nie istnieje), a następnie dodaj set nocompatibledo niego linię i zapisz.

Aniket Thakur
źródło
Umieściłem to w .vimrc. Dlaczego umieścisz go w .exrc?
pauljohn32
Oba źródła Vima - patrz dane wyjściowe :versiondla polecenia ładowania (także :h .exrclub :h init). Podejrzewam, że ktoś może chcieć zastosować ustawienia zarówno w vi, jak i vimie, lub może być zwykłą siłą przyzwyczajenia.
William Robertson
11

W edytorze vi są trzy tryby, a mianowicie:

  • tryb poleceń
  • tryb wprowadzania
  • tryb domyślny.

Po otwarciu pliku znajdujesz się w trybie domyślnym. Teraz, jeśli chcesz, aby przejść do określonej pozycji w tekście, wystarczy użyć klawiszy strzałek lub użycie h, j, k, lklucze. Zauważ, że to będzie działać tylko wtedy, gdy nie został naciśnięty i(lub jakiegokolwiek innego trybu wprowadzania polecenia wejściu jak a, A, I).

Przyczyną „B” może być to, że klawisze strzałek w trybie wprowadzania nie działają jak klawisze strzałek, więc wystarczy nacisnąć, Escaby przejść do trybu domyślnego w dowolnym momencie. Podczas przejścia do trybu wprowadzania naciśnij ilub a, aby poruszać i wystarczy nacisnąć iklawisze klucz i użycie strzałek lub h, j, k, l.

ps_cool
źródło
7

Miałem dokładnie ten sam problem, ale nie tylko na mojej lokalnej maszynie, ale także na połączeniach za pomocą szpachli na maszynie Sles na maszynie Win7 VM przez odbiornik Citrix. Zarówno host lokalny, jak i hosty zdalne pokazują, że po ponownej instalacji systemu Ubuntu wystąpił dokładnie ten sam problem.

Po odkryciu tego

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

Powoduje to dziwne zachowanie VI Zainstalowałem pakiet danych konsoli, który rozwiązuje problem!

sudo apt-get install console-data
kitingChris
źródło
3

Uwaga:

W innych postach są dobre informacje, ale żaden z nich nie próbował wyjaśnić, dlaczego tak się stało. Wiele osób będzie musiało się na to natknąć w przyszłości. Czy możesz również oznaczyć to pytanie jako rozwiązane, ponieważ prawdopodobnie pomógł Ci któryś z poprzednich postów?


Oto wyjaśnienie :

Vi to edytor, który istnieje już od dłuższego czasu, a jego korzenie sięgają systemów uniksowych. To dobre narzędzie, ale zostało powtórzone i teraz jest lepiej. Vim został napisany później i jest to iteracja. Ludzie zwykle nazywają vi „vim-minimal”, a vim jest „ulepszoną” wersją vi. Możesz myśleć o tym w ten sposób: vi jest rdzeniem, a vim się na nim rozwija.

Prawdopodobnie jak odkryłeś zachowanie :

Aby odkryć ten problem, nacisnąłeś „ i ”, aby przejść do trybu wstawiania , a następnie użyłeś klawiszy strzałek do nawigacji po właściwej linii i punkcie edycji. To właśnie spowodowało nieoczekiwany problem z char.

Rozwiązanie 1 lub 2

1) vi someFilePodczas korzystania z vi najpierw przejdź do punktu edycji, a następnie przejdź do trybu wstawiania.

2) vim someFilePo prostu użyj vima od samego początku.

Nie mogę się stresować, żeby przeczytać instrukcję (strony podręcznika) lub użyć -h do pomocy. Po dostosowaniu się do wzorów w powłoce strony podręcznika stają się twoim najlepszym przyjacielem. Przykład: man vilubman vim


Sprawdź, czy Vim jest zainstalowany .

Otwórz okno konsoli i wykonaj:

dpkg --list | grep vim

Jeśli otrzymasz coś podobnego do tego, możesz po prostu zacząć używać vima.

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

Jeśli wiersz polecenia zwraca nic, oznacza to, że vim nie jest zainstalowany. Skorzystaj z poniższych przykładów, aby zaktualizować repozytoria, a następnie zainstaluj vim.

sudo apt-get update
sudo apt-get install vim

Przy małej szansie, że użyjesz vi lub vima tylko podczas wyszukiwania w Internecie, jak coś naprawić i zapomnisz pisać vim, istnieje jeden sposób, aby to naprawić w przyszłości. Ostrzegam cię, abyś uważał. Możesz użyć aliasu, aby zastąpić vi odnośnikiem do vima, dzięki czemu bez względu na to, co wpiszesz w rzadkiej przyszłości, otrzymasz vim bez tego „ups!” za chwilę. Zawsze możesz usunąć alias później.

Typ vim .bashrc. Przejdź w dół do pustej linii tylko z ~(lub do dowolnej innej linii, która zaczyna się od alias(więc są zgrupowane razem), a następnie naciśnij klawisz i , aby przejść do trybu -wstaw-. W osobnym wierszu wprowadź następujące polecenie:

alias vi='vim'

Naciśnij, Esca następnie wpisz :wq. Teraz musisz ponownie załadować plik. Wpisz source .bashrcdowolną inną powłokę, która zostanie otwarta po dokonaniu tych zmian, automatycznie załaduje plik .bashrc.

D75
źródło
3

Wszystkie podane wyjaśnienia są nieco dziwaczne. Mam zainstalowany vi, ale nie vim.

Sprawdzanie alternatyw: /etc/alternatives/vi/usr/bin/vim.tiny

Tak vijest vim.tinyi używa /etc/vim/vimrc.tiny.

A w vimrc.tinytobie znajduje się następujący wiersz:

set compatible

Co jest prawie jedyną rzeczą w tym pliku. Zauważ, że w /etc/vim/vimrcnim się używa nocompatible.

Więc zainstaluj vima, zmień vimrc.tinyplik lub utwórz własny, ~/.vimrcktóry powinien zawierać wiersz:

set nocompatible
Pistolet
źródło
1
Nie jestem pewien, co jest takie dziwne. Ostatecznie sugerujesz: 1. zainstaluj Vima - askubuntu.com/a/220072/158442 , 2. tworząc ~/.vimrci ustawiając nocompatible: askubuntu.com/a/353944/158442 lub 3. edytując plik systemowy. Tylko sugestia edycji /etc/vim/vimrc.tinyjest nowa, a mimo to nazywasz dziwne odpowiedzi, sugerując to samo.
muru
1

Tradycyjny edytor vi nie rozpoznaje klawiszy strzałek (... afair). Istnieją dwa rozwiązania:

  1. użyj vim zamiast vi
  2. użyj h, j, k i l do nawigacji (nie możesz nawigować podczas edycji na tradycyjnym vi btw.)
MadMike
źródło
To nie jest prawda. Poszukaj aplikacji opartych na terminfo / termcap i libcurses. Używam vi od 1990 roku w Xenix, SCO Unix, AIX, starym hpux i innych, a pure-vi z lat 80. już obsługuje mapowanie terminfo / termcap.
Luciano
@ James-Wong, więc powinienem sformułować swoją odpowiedź. Do „czystego vi pod Ubuntu nie ...”
MadMike
... i to miało być komentarzem do @luciano
MadMike
1

Może to być również spowodowane TERMzmienną; ustaw na przykład tak:

 export TERM=xterm
Jasper Nuyens
źródło
To rozwiązało problem, dla którego inne odpowiedzi nie. Dzięki!
greg
1

W niektórych systemach nocompatibleopcja nie jest dostępna lub może nie rozwiązać problemu, jeśli wtyczka zepsuje działanie klawiszy strzałek. Oto obejście ...

Edytuj .exrcplik, aby zawierał następujące wiersze:

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

Lub, jeśli problem występuje tylko w trybie normalnym, możesz zmienić nmapi pominąć następujące czynności a:

nmap! ^[OA ^[k

i tak dalej.

Oto kluczowe kombinacje potrzebne do ich wytworzenia (pokazane tylko pierwsze):

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

Unika trybu edycji, przesuwa się w pożądanym kierunku i ponownie wprowadza tryb edycji. Jest to potrzebne, aby pokonać Vi czytającą sekwencję ucieczki jako sekwencję dosłownego <ESC> <O> <A> itd.

Źródło: https://hea-www.harvard.edu/~fine/Tech/vi.html

Dominic Comtois
źródło
1

W przypadku VI utwórz lub edytuj plik „~ / .exrc” lub VIM utwórz lub edytuj plik „~ / .vimrc” ustaw lub dodaj w linii.

set nocompatible

W chwili pisania tego tekstu znajdują się pochwały na drugim najczęściej głosowanym punkcie, które zastanawiają się, dlaczego ich zgłoszenie nie zostało zaakceptowane. Powodem jest to, że istnieją hosty, które nie pozwalają na instalowanie innych edytorów. Nawet wtedy vim ma czasem te same efekty, więc jest kilka przydatnych informacji z dwóch pierwszych wpisów. Nie mogę jednak komentować, ale mam nadzieję, że wyjaśnia to powody, dla których żaden z nich nie jest w 100% poprawny w 100% przypadków.

tuxdalinuxpenguin
źródło
0

Na tej maszynie musiałem make sureże

set nocompatible

jest last entry in ~/.vimrc. Lub przynajmniej jeden z ostatnich wpisów, w szczególności nie jest już ładowana żadna wtyczka.

HTH

Gen.Stack
źródło
0

Z jakiegoś powodu Ubuntu pominął inicjowanie envvar HOME dla użytkownika root na moim nowym VPS 18.04. W takim przypadku vi nie może znaleźć pliku .vimrc. Problem nie występuje dla zwykłych użytkowników (w / home /).

Aby sprawdzić zmienną:

echo $HOME

Jeśli spowoduje to powstanie pustej linii, zmienna nie zostanie ustawiona. Problem zniknął po

export HOME=/root

Przeniosłem polecenie do pliku /root/.bashrc (nie wiem, gdzie to zwykle jest ustawione).

Erik
źródło