Jestem programistą C #, który niedawno postanowił poszerzyć swoją wiedzę o dostępnych mi narzędziach. Pierwszym narzędziem, którego postanowiłem się nauczyć, jest Vi / Vim. Jak dotąd wszystko szło dobrze, ale jest kilka pytań, na które nie mogę znaleźć odpowiedzi:
Powiedzmy, że chciałem wyciągnąć szereg linek. Wiem, że jest na to wiele sposobów, ale chciałbym to zrobić według numeru linii. Pomyślałem, że będzie to podobne do działania poleceń zastępczych, coś w stylu
81,91y
. Czy jest na to sposób?Jestem trochę zdezorientowany co do
g
polecenia w trybie normalnym. Wydaje się, że robi mnóstwo rzeczy i nie mogę tak naprawdę określić, co robi polecenie g. Nie wiem, czy jest to polecenie ruchu, czy rodzaj „złap wszystko” dla innych poleceń wykonywanych w trybie normalnym. Czy ktoś może mi to wyjaśnić lub wskazać odniesienie, które daje dobre wyjaśnienieg
polecenia?
Odpowiedzi:
Linie Yank 81-91
Jeśli twoje palce nie lubią znajdować klawiszy
:
i,
, to również zadziała (przejdź do linii 81, przeciągnij 11 linii)Moje jedyne zastosowanie
g
to5gg
. Aby przejść do piątej linii.22gg
: 22 linia. Jak powiedział jimbo, tak naprawdę jest to tylko modyfikator niektórych innych poleceń.Aby uzyskać kompletność, ( http://vim.wikia.com/wiki/Power_of_g ) wyjaśnia wiele, jak
g
działa w trybie poleceń.źródło
gg
przejdzie do pierwszej linii, aG
do ostatniej. Również5G
przechodzi do linii 5. Znaki mogą być również używane zamiast numerów linii (dobre dla makr), np .::'a,52y
81G11Y
jest jeszcze „krótszy”.mx
przed i'x
po, ale wtedy wersja trybu poleceń staje się dużo bardziej zwięzła. Humm ... gdy tylko to napisałem, zobaczyłem odpowiedź od @Asta.Możesz także skopiować bieżące wiersze do aktualnej lokalizacji kursora za pomocą „t”.
Spowoduje to wklejenie linii 81-91 pod linią, na której znajduje się kursor.
Nauczyłem się tego z http://vimcasts.org, który jest doskonałym źródłem informacji o VIM.
źródło
t.
oznacza?t
można uważać, że jestt
chory lubt
o i.
jest to adres bieżącej linii.:copy
Lubię też używać opcji względnego numeru linii vima, co oznacza, że mogę po prostu wpisać:
aby yankować tekst do nazwanego bufora a.
NB Podanie A doda to, co szarpiesz, do bieżącej zawartości bufora a.
Nie zapomnij, że możesz również kopiować bloki tekstu i przenosić bloki tekstu za pomocą podobnych poleceń:
oznacza skopiowanie czterech wierszy tekstu 10 wierszy powyżej do poniżej bieżącego wiersza i
oznacza przeniesienie czterech wierszy tekstu o 10 linii powyżej do poniżej bieżącej linii.
źródło
G
Komenda trafia do pewnej liczby linii, jeśli jest mu towarzyszyć wartość licznika.81G
włącza cię do linii 81.y
Polecenie to może być połączone z ruchem, npG
. Więc aby szarpnąć wszystko do linii 91, możesz użyćy91G
.Razem otrzymujesz:
Idź do linii 81, a następnie szarp, jadąc do linii 91.
źródło
81G"+y91G
81,91y
i jakoś wycelować w rejestr?:81,91y +
:81,91y +
nie działa. Działa dla innych rejestrów, takich jak:81,91y a
na przykład, ale wydaje się, że nie lubi tego+
rejestru. Czy to zdecydowanie działa na innych ludzi?g
sam nic nie robi. Jest to jedno z kilku meta-rozkazów, które przechowuje kilka niepowiązanych ze sobą poleceń.z
to kolejna taka komenda.źródło
Vim
:help index
opisujeg
jako:Przewiń w dół (lub
:help g
), aby wyświetlić listę.źródło
Najlepszym rozwiązaniem byłoby wejście w „tryb wizualny” wciskając v. A po zaznaczeniu linii wystarczy je skopiować naciskając y. Następnie wklej skopiowane linie, naciskając p.
źródło
Oprócz
:91,96y a
tego yank (y
) wiersze od 91 do 96 do rejestrua
(wklejone"ap
), yankowane wiersze mogą być dołączane do rejestru za pomocą:Tzn. Kapitalizacja
A
rejestru powoduje operację dołączania do rejestrua
zamiast nadpisywania. Kapitalizacja rejestru zawsze działa w ten sposób, np.:let @A=';'
Dodaje;
do rejestrua
.Użycie plus (+) lub minus (-) wskazuje linie względem aktualnej pozycji kursora:
To znaczy wyszarpnęłoby (
y
) 21 linii wokół aktualnej pozycji kursora i umieściło je w rejestrzeb
.Brak danych wejściowych w rzeczywistości reprezentuje również bieżącą pozycję kursora, co oznacza, że:
wyszarpnąłby tekst z 5 linii powyżej do bieżącej pozycji kursora do nazwanego bufora
a
i:yankowałoby 5 linii za bieżącą pozycją kursora do bufora
a
.Uwaga: Jeśli masz makro w buforze
a
, zostało ono właśnie nadpisane przez poprzednie yankowanie, ponieważ rejestry yank i rejestry makr to tak naprawdę to samo. Dlatego przypadkowo możesz wkleić makro, edytować je, a następnie wciągnąć z powrotem do rejestru. Osobiście używam liter, do których sięgam lewą ręką, do szarpania, a liter, do których dochodzi prawą ręką, do makr.Przesuwanie bloków tekstu wygląda następująco:
co oznacza przeniesienie czterech wierszy znajdujących się 10 wierszy przed bieżącym kursorem, poniżej bieżącej linii.
Uzupełnienie
I wcześniej zmieszany
ya
w:91,95ya a
być jakoś synonimemya{motion}
gdzie ruch został dostarczony91,95
. To było niepoprawne, a „a”ya
jest zupełnie niepotrzebne. Na moją obronę myhelp yank
nie przekazuję, żeya
jest to możliwy aliasyank
.źródło
:ya
to skrót od:yank
, więc nie jestem pewien, co myślę o szarpaniu wszystkich linii . Ale dobra robota, skondensowanie niektórych rozproszonych informacji:help yank
. Nie ma aliasuya
dlayank
. Masz jednak rację,a
to nie oznacza „wszystko”, technicznie oznacza „a”. Wolę jednak powiedzieć „wszystko”, ponieważ wydaje mi się to bardziej sensowne.:[range]y[ank] [x] Yank [range] lines [into register x]
nawiasy kwadratowe wy[ank]
wskazują, że[ank]
są one opcjonalne.:y
,:ya
i:yan
są domniemanymi aliasami dla:yank
:ya
y
Jako długi użytkownik Vi / Vim mam tendencję do używania „znaczników” zamiast numerów linii (lub „znaczników linii”). Działa to tak:
m
jest znakiem „mark”; następnie użyj dowolnej litery, aby zidentyfikować / nazwać znak. Aby powrócić do znaku poprzedzającego nazwany znak pojedynczym cudzysłowem ('a
) Te znaki mogą być używane jako zakres. Przykłady:W trybie poleceń przesuń kursor do linii 2, wpisz
ma
. przewiń do linii 4, wpiszmb
. Aby szarpnąć od znaku a do znaku b, wpisz:Aby usunąć od znaku a do znaku b typu:
Aby wyszukać od znaku a do znaku b i zamienić „ine” na „atrament”:
Aby skopiować znak od a do znaku b i wkleić poniżej bieżącej pozycji („kropka” zawsze odnosi się do wiersza, w którym obecnie znajduje się kursor):
Przesuwaj wiersze kodu, między znakami od a do b , o jedną tabulację w prawo (użyj przeciwnej strzałki,,
<
aby przejść w lewo):W trybie poleceń możesz wrócić do znaków, po prostu wpisując,
'a
aby wrócić do zaznaczonej liniia
. Wpisywanie''
przenosi cię z powrotem do poprzedniej pozycji (niestety pamięta tylko poprzednią pozycję, a nie dwie wstecz).Możesz szarpać do nazwanych buforów, kopiować, usuwać linie, wyszukiwać i zamieniać tylko fragmenty kodu itp. Bez konieczności znajomości numerów linii.
źródło
Aby wyrwać linie z linii numer 81 do 91:
podejście 1:
81gg11yy
Sposób 2:
81gg
Następnieshift+v
czym91gg
następniey
źródło