Jak przejść do końca linii w Vimie?


1192

Wiem, jak ogólnie poruszać się w trybie poleceń, w szczególności przeskakując do linii itp. Ale jakie jest polecenie, aby przejść do końca linii, na której aktualnie jestem?


19
Podstawowe polecenia vima omówione w mniej niż 10 minut youtube.com/watch?v=71YTkxUNwmg
eomeroff

14
Co jest złego w spędzaniu kilku minut na bieganiu przez vimtutora? To już część twojej instalacji Vima i pokazuje ci podstawy.
dash-tom-bang

@ dash-tom-bang Cóż, mają tutaj dość wysoki wynik ... :) Ale tak, masz rację, vimtutorjest świetny. Prawdopodobnie nie wiedzieli o tym?
Pryftan

Odpowiedzi:


2050

Tylko klawisz $ (znak dolara) . Możesz użyć, Aaby przejść na koniec linii i przejść do trybu edycji (Dołącz). Aby przejść do ostatniego niepustego znaku, możesz nacisnąć, ga następnie _klawisze.

Przeciwieństwem Ajest I(tryb Insert na początku linii), a na marginesie. Naciśnięcie tylko ^spowoduje umieszczenie kursora na pierwszym znaku wiersza innym niż białe znaki.


81
Przejdź do ostatniego niepustegog_
SergioAraujo

2
Czasami bardziej przydatna jest g_odmiana, ponieważ nie zawiera pustych znaków
rogercampos,

6
Wariant _g jest bardzo przydatny podczas pracy w trybie wizualnym, ponieważ pozwala korzystać z linii bez nowej linii na końcu.
Greg Robbins

2
Podczas gdy klawisze Home i End działają na zwykłej klawiaturze, podczas korzystania z laptopa potrzebne są $ i ^ :)
Sridhar Sarnobat 12.12. O

Powinieneś dodać ^ do listy.
Tek

304

Jak wiele osób powiedziało:

  • $ doprowadzi cię do końca linii

ale również:

  • ^lub _przeniesie Cię do pierwszego niebiałego znaku w linii, i
  • 0(zero) prowadzi do początku linii włącznie. Biała przestrzeń

Wiedziałem | prowadzi nas na początek linii, ale nie wiedziałem o 0. Więc zarówno 0, jak i | robić dokładnie to samo, tak?
Kamran Bigdely

8
@kami: chociaż opisy są różne, wydają się zachowywać identycznie. |Polecenie potoku może jednak liczyć, np. 3 | aby przejść do trzeciej kolumny.
Paul Ruane

136
  • $ przesuwa się do ostatniego znaku na linii.
  • g _ przechodzi do ostatniej spacji.

  • g $ przechodzi na koniec linii ekranu (gdy linia buforowa jest owinięta przez wiele linii ekranu)


Wydaje mi się, że g_ jest tym samym, co $ b
Dave Aaron Smith

3
@DaveAaronSmith: bprzechodzi na początek poprzedniego słowa, które wcale nie jest tym samym. Jest to mniej więcej odpowiednik $ge.
Paul Ruane

9
Używam _i g_do visual / yanking, podobnie jak kopiuję / usuwam $znak nowej linii (LN).
Ernest

Dla mnie $ przechodzi na koniec bieżącej linii ekranu (po zapakowaniu). Nie udało mi się dowiedzieć, dlaczego. g_to jedyny sposób, w jaki udało mi się dotrzeć do faktycznego końca linii.
ezuk

@ezuk $przechodzi na koniec linii, nawet jeśli jest zapakowany dla mnie. Nie znam ustawień dostosowujących jego zachowanie. Być może został ponownie mapowany przez twój .vimrc g$?
Paul Ruane

66

Główne pytanie - koniec linii

$ przechodzi na koniec linii, pozostaje w trybie poleceń

A przechodzi na koniec wiersza, przechodzi w tryb wstawiania

I odwrotnie - początek wiersza (technicznie pierwszy znak spacji )

^ przechodzi na początek linii, pozostaje w trybie poleceń

I (wielkie litery i) przechodzi na początek linii, przełącza do trybu wstawiania

Dalej - początek linii (technicznie pierwsza kolumna niezależnie od białych znaków )

0 (zero) przechodzi na początek linii, pozostaje w trybie poleceń

0i (zero, a następnie małe litery i) przechodzi na początek linii, przełącza się do trybu wstawiania

Dla tych, którzy zaczynają się uczyć vi, jest to dobre wprowadzenie do vi, wymieniając obok siebie polecenia vi do typowych ruchów kursora i klawiszy skrótu edytora graficznego Windows.

edytor vi dla użytkowników systemu Windows


3
Analogiem do Ijest nie, 0ale ^, ponieważ oba Ii ^przechodzą do pierwszego niebiałego znaku linii, ale 0przechodzą do kolumny zero (jak sama nazwa wskazuje).
wchargin

@wchargin prawda, myślałem, że nie mogę znaleźć analogii 0? (przejdź do pierwszego znaku (= kolumna 0) wiersza i przejdź do trybu wstawiania)
franssu

@franssu: Jedyne, o czym wiem, to 0i. :-)
wchargin

@wchargin - Dziękujemy za poprawność techniczną. Zaktualizowałem post.
ap-osd

42

Jeśli bieżąca linia zawija się wokół widocznego ekranu do następnej linii, możesz użyć g $, aby dostać się do końca linii ekranu .


3
Właśnie odkryłem, że w oczekiwaniu na polecenia w górę i w dół klawiszem g vim przesuwa kursor na ekranie, a nie na linii. Tj. Gj i gk pozwalają poruszać się w górę iw dół po długiej linii. Naprawdę użyteczne.
Druckles,

1
Odkryłem również, że pisanie gw i coś wydaje się zmieniać j i k na stałe, aby zachowywać się w ten sposób. Nie jestem pewien, jak i dlaczego. Czy ktoś może to wyjaśnić?
Druckles,

4
@Druckles: trochę opóźnienie w odpowiedzi, ale jeśli nadal zastanawiasz się, (lub jeśli ktoś czytając to jest) gwi gqsą polecenia, które sformatować tekst. (patrz :h gwi :h gq) Najprawdopodobniej to zrobiłeś gw{motion}i zmieniłeś trochę tekstu, aby linie ekranu odpowiadały rzeczywistym wierszom.
pandubear


13

W wielu przypadkach, gdy znajdujemy się w ciągu, otacza nas podwójny cudzysłów lub podczas pisania instrukcji nie chcemy naciskać klawisza Escape i przechodzić do końca tego wiersza za pomocą klawisza strzałki i nacisnąć średnik ( ;), aby zakończyć linia. Napisz następujący wiersz w pliku vimrc :

imap <C-l> <Esc>$a

Co mówi linia? Mapuje Ctrl + l na szereg poleceń. Jest to równoważne z jednoczesnym naciśnięciem Esc(tryb poleceń), $(koniec linii), a(dołącz).


dziękuję za to. Chciałem dodać Ctrl-e z powrotem do mojego vima, gdy idę do końca linii jak na mojej pierwszej maszynie i nie wiedziałem jak
tristanbailey

1
Jak mówi zaakceptowana odpowiedź, możesz nacisnąć A, aby zrobić to samo.
próbuje

4
@trysis źle zrozumiałeś, to nie odchodzi od trybu edycji, co jest całkiem miłe.
Marconi,

2
Masz rację. vimz pewnością pozwala ci robić znacznie więcej w znacznie krótszym czasie dzięki takim rzeczom. @razorxpress, drobna korekta byłaby imap <C-l> <Esc>A, co sprawia, że ​​Ctrl + l jest równoważne naciśnięciu Esc(wyjście z trybu wstawiania), a następnie A(dołącz do końca linii).
trysis

3
Myślę, że bardziej idiomatycznym sposobem odwzorowania tego byłobyinoremap <C-l> <C-o>A
bennyty

12

Zaletą klawisza „End” jest to, że działa zarówno w trybie normalnym, jak i wstawiania.

„$” działa tylko w trybie normalnym / komend, ale działa również w klasycznym edytorze vi (dobrze wiedzieć, kiedy vim nie jest dostępny).


38
Po co się kręcisz w trybie wstawiania? Żaden zwykły przyzwoity obywatel nie chodzi tam po świetle dziennym. Wiesz, co się tam dzieje, prawda? Kod tam znika, wiesz? Znika i nigdy więcej nie słychać.
Wieża

3
Dziękuję za to, ponieważ lubię pozostać w trybie wstawiania po wejściu do niego. Niestety mój laptop nie ma klucza End. :(
ray

12

Zwróć także uwagę na różnicę między linią (lub może fizyczną) a linią ekranową . Linia kończy się znakiem końca linii („\ n”). Linia ekranu to cokolwiek, co dzieje się jako jeden wiersz znaków w twoim terminalu lub na ekranie. Oba się rozdzielają, jeśli masz fizyczne linie dłuższe niż szerokość ekranu, co jest bardzo częste podczas pisania wiadomości e-mail i tym podobnych.

To rozróżnienie pojawia się również w poleceniach końca linii.

  • $i 0przejdź odpowiednio do końca lub początku fizycznej linii lub akapitu:
  • g$i g0przejdź odpowiednio do końca lub początku linii ekranu lub akapitu.

Jeśli zawsze wolisz to drugie zachowanie, możesz ponownie przypisać klucze w ten sposób:

:noremap 0 g0
:noremap $ g$

1
Jak dostać się do ostatniej spacji w linii? (niezależnie od tego, czy jest to linia ekranu, czy linia fizyczna)
Kamran Bigdely

g_jest ostatnim niebiałym odstępem linii fizycznej . Co powiesz na linię ekranu?
próbuje

10

Naciśnij, Aaby przejść do trybu edycji, zaczynając od końca linii.


9

Lub istnieje oczywista odpowiedź: użyj Endklawisza, aby przejść do końca linii.


1
Tak, terminal Mac to taki, który zauważyłem, że przejmuje klucze i nie przekazuje ich do rzeczy działających w terminalu. Jedna z rzeczy, które mnie denerwują, gdy trochę używam Maca.
davr

Cały sens używania vima nie polega na używaniu klawiszy takich jak „End”. Nigdy nie wychodź z domowego rzędu.
Jon Thoroddsen

7
Na komputerze Mac nie ma klawisza End.
kenorb

1
@kenorb Był taki czas, kiedy opublikowałem komentarz ... ale Apple lubi usuwać funkcje z biegiem lat. netdna.webdesignerdepot.com/uploads/2009/01/… to właściwie jedna z moich ulubionych klawiatur wszechczasów
davr

9

Nie widzę skrótu dla Macbooka do używania vima w standardowym terminalu. Mam nadzieję, że to komuś pomoże. Dla użytkowników systemu macOS (testowane na Macbooku Pro 2018):

fn+ - przejście do linii początkowej

fn+ - przejście do linii końcowej

fn+ - przesuń stronę w górę

fn+ - przesuń stronę w dół

fn+ g - przesuń kursor na początek dokumentu

fn+ shift + g - przesuń kursor na koniec dokumentu

W przypadku dwóch ostatnich poleceń należy kiedyś nacisnąć dwukrotnie.


6

Prawdopodobnie niezwiązane, ale jeśli chcesz rozpocząć nową linię po bieżącej linii, możesz użyć o w dowolnym miejscu linii.


3

Najłatwiejszą opcją byłoby wpisanie $. Jeśli pracujesz z blokami tekstu, możesz docenić to polecenie {i }aby odpowiednio przesunąć akapit do tyłu i do przodu.


2

Byłem przyzwyczajony do Home / End, który doprowadził mnie do początku i końca linii w trybie wstawiania (od użycia w Windows i myślę, że Linux), którego Mac nie obsługuje. Jest to szczególnie denerwujące, ponieważ kiedy używam vima na zdalnym systemie, nie mogę tego łatwo zrobić. Po kilku bolesnych próbach i błędach wymyśliłem te .vimrcwiersze, które robią to samo, ale związałem się z Ctrl-A na początku linii i Ctrl-D na końcu linii. (Z jakiegoś powodu Ctrl-E, jak sądzę, jest zarezerwowany lub przynajmniej nie mogłem znaleźć sposobu, aby go powiązać.) Ciesz się.

:imap <Char-1> <Char-15>:normal 0<Char-13>
:imap <Char-4> <Char-15>:normal $<Char-13>

Tutaj jest dobra tabela kodów znaków kontrolnych ASCII dla innych:

http://www.physics.udel.edu/~watson/scen103/ascii.html

Możesz także zrobić kombinację klawiszy Ctrl-V + Ctrl-, ale to nie wkleja się tak dobrze w takich miejscach.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.