Super szybka nawigacja VIM


91

Jedyne, czego mi brakuje w korzystaniu z innych edytorów, to znajdowanie swojego miejsca za pomocą myszki. Potrafię spojrzeć oczami na określony obszar pliku i ruchem myszy i kliknięciem jestem tam. Z VIM'em muszę jjjjjkkkkkkjjjjhhhh ... prawie gotowe hhhhh o bzdury przegapiłem o 3 znaki, lll.

Uczę się robić znaczniki i znalazłem świetną wtyczkę do zakładek, mogę tworzyć znaczniki i niszczyć je <f3>i nawigować do nich, niestety znaki są zapomniane, gdy plik jest zamknięty.

Jak wszyscy super nawigujecie po plikach? Wiem, że mógłbym też zrobić 5j7k4j5h i tak dalej, ale musi istnieć wtyczka, która może czytać z moich oczu i umieszczać kursor tam, gdzie naprawdę tego potrzebuję.

Nauczyłem się również używać /% do wyszukiwania określonego terminu. To pomaga, ale wszystkie pasujące znaki są podświetlone w całym dokumencie.


Wszystkie świetne odpowiedzi, gdy wciąż jesteśmy na ten temat, pomyślałem, że mogę poeksperymentować z czymś takim jak nG (przejdź do linii numer) f% (znajdź pierwszy znak tego, czego szukam, lub jak ktoś zasugerował, użyj w, aby przejść do przodu do następnego słowa
Helmut Granda

Odpowiedzi:


173

Spróbuj $ vimtutor, nauczy Cię wszystkiego, co musisz wiedzieć, aby zacząć.

hjkl są wierzchołkiem góry lodowej i bardzo rzadko używane, przynajmniej w moim przypadku.

wWEei BbgegEwszystkie pozwalają poruszać się słowo po słowie:

  • wi eiść do przodu, Wi Ewziąć spacje i znaki interpunkcyjne pod uwagę

    " here the * marks the default location of the cursor
    " and each letter shows where you jump when you hit the key.
    
    Latin: Lorem ipsum dolor sit amet.
                       *   e   e    e
                       *   E   E     E
    *    w w     w     w     w   w   w
    *      W     W     W     W   W   W
    
  • bi geiść do tyłu, Bi gEwziąć spacje i znaki interpunkcyjne pod uwagę

    Latin: Lorem ipsum dolor sit amet.
    b    b b     b     *
    B      B     B     *
         ge    ge    ge*
        ge
         gE    gE    gE*
    

fFtTsłużą do sięgania po konkretny znak w bieżącym wierszu i ;,służą do powtarzania tego ruchu w tym samym kierunku dla ;iw przeciwnym kierunku dla ,:

  • fmwskakuje na następny mnaprzód, Fprzechodzi do tyłu

    Latin: Lorem ipsum dolor sit amet.
    *          fm    ;            ;
               ;     Fm          *
    
  • tmskacze PRZED następnym do mprzodu, Tprzechodzi do tyłu

    Latin: Lorem ipsum dolor sit amet.
    *         tm    ;            ;
              ;     Tm           *
    

/? służą do przeskoczenia do pierwszego wystąpienia wzorca z aktualnej pozycji kursora:

  • /pattern idzie do przodu

    Latin: Lorem ipsum dolor sit amet.
    *            /ips
    
  • ?pattern cofa się

    Latin: Lorem ipsum dolor sit amet.
    ?Lat             *
    

0$ służą do przeskoczenia do pierwszego i ostatniego znaku w linii.

    (whitespace)Latin: Lorem ipsum dolor sit amet.(whitespace)
    0                  *                                     $

^g_ są używane do przeskoczenia do pierwszego i ostatniego drukowalnego znaku w linii.

    (whitespace)Latin: Lorem ipsum dolor sit amet.(whitespace)
                ^      *                         g_

Pojedyncze i połączone ()[]{}służą do przenoszenia frazy po frazie lub akapitu po akapicie lub bloku kodu po bloku kodu.

<C-b>i <C-f>służą do przewijania ekranu do tyłu i do przodu.

<C-u>i <C-d>służą do przewijania o pół ekranu do tyłu i do przodu.

H, MI Lprzesunąć kursor do góry, w środku dna widoku, odpowiednio.

zt, zzI zbprzesunąć kreską kursora do góry, w środku dna widoku, odpowiednio.

I tak dalej.

:help motion.txt rozwali twój umysł.


17
Zwykle tego nie robię, ale ten komentarz ma na celu tylko powiedzieć, że to świetna odpowiedź!
jojo

Z jakiegoś powodu nigdy wcześniej nie używałem H, M ani L, świetne wskazówki!
Chris

Dodanie tego ]}i [{(2 naciśnięcia klawiszy) przeskok na koniec lub początek zakresu (np. Zdefiniowany przez{ ... }
Matthew Woo

3
Cóż, to nadal nie odpowiada na pytanie OP how to jump to a line he's seeing like using a mouse. Znam i używam wszystkich skrótów klawiszowych, o których wspomniałeś przez cały czas. Ale nadal nie jest tak wydajne, jak wskazywanie myszy podczas skakania na duże odległości.
Penghe Geng

yeah H, M, L są łatwe do zapamiętania: High, Middle, Low;) @Chris
nils petersohn

25

Oprócz polecenia ruchu vima uważam, że wtyczka vim o nazwie EasyMotion jest bardzo przydatna do nawigacji, jeśli znasz vimperator lub pentadactyl, EasyMotion po prostu przywróć tryb podpowiedzi z powrotem do vima. tutaj jest animowane demo, a tutaj jest samouczek wideo. Mam nadzieję, że to Ci pomoże.


Zaletą easymotion jest to, że możesz przejść w dowolne miejsce na ekranie za pomocą zaledwie 3 naciśnięć klawiszy.
Xavier T.

+1: EasyMotion to tak naprawdę plecak odrzutowy ruchu Vima. (nawiasem mówiąc, także PreciseJump. Właściwie EasyMotion jest synem PreciseJump)
Dmitry Frank,

2
Jak, do diabła, autor EasyMotion uzyskał tę niesamowitą linię statusu w wersji demonstracyjnej?
Cyrille

1
„Super awesome status line” to wtyczka o nazwie „Powerline”. Jest tutaj: vim.org/scripts/script.php?script_id=3881
DEzra

czy możesz zaktualizować animowany adres URL demonstracji? to już nie działa
brauliobo

20

W vimie jest mnóstwo sposobów poruszania się, to jedna z jego naprawdę mocnych stron. Używam {i }dużo, które przesuwają się w górę iw dół do następnej pustej linii w tym kierunku. %przydaje się do przechodzenia tam iz powrotem do pasującego nawiasu (dowolnego rodzaju). Wi Bporuszaj się do przodu i do tyłu za pomocą „słowa”.

Może warto przejrzeć sekcję Poruszanie się w podręczniku Vima.


4
Prawdopodobnie warto również wspomnieć o przewijaniu w górę iw dół za pomocą odpowiednio Ctl + U i Ctl + D.
Nick,

10

vim obsługuje mysz! spróbuj (w swoim .vimrc):

set mouse=a

sidenote : jako użytkownik ekranu odkryłem, że również potrzebuję

set ttymouse=xterm2

żeby to zadziałało.


4
Dobrze wiedzieć, jednak nadal będę szukał idealnej, szybkiej nawigacji bez konieczności używania myszy.
Helmut Granda,

9

osobiście wolę używać:

"/<chars><enter>" to quickly move to somewhere   ( extremely fast! trust me! )
":<number>" to go to some line, 
"ctrl + f/b" to forward/back
"g;" to move to the last editing place.
"w/b" to move by word
"jklh" to move your cursor to the exact position


5

Oprócz {, }, (, ), <number>cb, <number>cB, <number>cWi %używam takich technik Poruszanie się:

  • ciw, diw( ciW, diW). itp., aby szybko edytować / usuwać słowo pod kursorem (w tym znaki inne niż spacje)
  • ci(, ci"( ca(, ca") itp., aby szybko edytować nawiasy wewnętrzne, cudzysłowy (w tym nawiasy, cudzysłowy). To samo dotyczy d.
  • Zaznacza WIELKIMI literami, aby ustawić je globalnie (między plikami) i trwale (gdy bufor jest zamknięty). Na przykład mAutworzy globalny znacznik, Aktóry będzie dostępny za pomocą 'Apolecenia (lub zgodnie `Az kolumną).
  • gf aby szybko przejść do pliku pod kursorem
  • f, t( F, T) aby przejść do znaku przed znakiem w prawo (po lewej) (użyj ;do powtórzenia). Są one szczególnie przydatne dla poleceń di c(użyj .do powtórzenia).
  • ^]przejść do tagu i ^Tcofnąć się.

I wiele innych sposobów na poruszanie się :)

Sprawdź to, aby uzyskać więcej informacji: http://www.thegeekstuff.com/2009/03/8-essential-vim-editor-navigation-fundamentals/

PS Dla użytkowników railsów jest bardzo przydatna wtyczka rails-vim, możesz też chcieć ją sprawdzić.


3

to jest dobre miejsce do nauki podstawowych komend nawigacyjnych, część mocy / prędkości vim pochodzi od kombinacji ruchu z akcji tj cw-> zmiana słowo d10j-> usuń 10 linii w dół itd. Również to i to są interesujące czyta.


2

Możesz :set nohlsearchwyłączyć podświetlanie wyszukiwanych znaków.

Często korzystam z ctagów.


github.com/richoH/dotfiles/blob/master/vimrc Możesz tam znaleźć kilka innych przydatnych rzeczy.
richo

Dzięki za wskazówkę, przeglądałem twój vimrc i znalazłem twoją notatkę, w której ustawiłeś podświetlenie linii, gdy osiągniesz 80 znaków podczas pisania e-maili lub dokumentów. Dlaczego miałbyś pisać e-maile w VIM? Rozumiem dokument do użytku osobistego, ale nie mam pewności co do e-maila.
Helmut Granda,

Używam mutt + vim do czytania i pisania większości moich e-maili. Używam również wtyczki It's all text do pisania dużej ilości treści internetowych w vimie. Mam włączone zawijanie słów w wiadomościach e-mail, ale w przypadku linków itp. Może być przydatne przypomnienie, jeśli nie sformatowałem poprawnie lub jeśli zagnieżdżone cudzysłowy stają się zbyt długie.
richo

0

Napisałem wtyczkę z myślą o super szybkiej nawigacji, nazywa się ona bez ruchu:

https://github.com/anschnapp/move-less

Umożliwia wygodne przeszukiwanie pliku dziury, przewijając za pomocą ( h j k l-klucze). Nie zmieniasz pozycji kursora podczas przewijania strony dołka (w oparciu o sztuczkę pasującą). Jeśli przerwiesz wyszukiwanie, to właśnie tam, gdzie zacząłeś.

Aby uzyskać super szybką nawigację, zamierzam użyć mojej wtyczki, aby uzyskać docelową pozycję na ekranie, a następnie przeskoczyć do właściwej pozycji za pomocą easymotion (co było już zalecane w innej odpowiedzi):

https://github.com/easymotion/vim-easymotion

Jeśli połączysz oba, możesz nawet zapoznać się z historią skoków i przeskoczyć między miejscem pochodzenia a celem po prostu za pomocą <c-o>i <c-i>.

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.