Istnieje mnóstwo pytań, w których ludzie rozmawiają o popularnych trikach, w szczególności „ Vim + ctags tips and tricks ”.
Nie odnoszę się jednak do często używanych skrótów, które ktoś nowy w Vimie uzna za fajne. Mam na myśli doświadczonego użytkownika systemu Unix (programistę, administratora itp.), Który uważa, że wie coś, o czym 99% z nas nigdy nie słyszało ani nie marzyło. Coś, co nie tylko ułatwia ich pracę, ale jest również CHŁODNE i hackerskie . W końcu Vim znajduje się w najbardziej bogatym w mroki systemie operacyjnym na świecie, dlatego powinien mieć zawiłości, o których tylko nieliczni uprzywilejowani wiedzą i chcą się z nami podzielić.
Odpowiedzi:
Może nie jest to coś, o czym 99% użytkowników Vima nie wie, ale jest to coś, z czego korzystam codziennie i o czym powinien wiedzieć każdy użytkownik Linux + Vim.
Podstawowe polecenie, ale niezwykle przydatne.
Często zapominam sudo przed edycją pliku, na którym nie mam uprawnień do zapisu. Kiedy przychodzę zapisać ten plik i pojawia się błąd uprawnień, po prostu wydaje to polecenie vim, aby zapisać plik bez potrzeby zapisywania go w pliku tymczasowym, a następnie ponownie go kopiuję.
Oczywiście musisz być w systemie z zainstalowanym sudo i mieć prawa sudo.
źródło
sudo vim
. Zamiast tego powinieneś wyeksportowaćEDITOR
jako vim i uruchomićsudoedit
.Niedawno odkryłem coś, co uważałem za bardzo fajne:
Przywraca dokument do stanu sprzed 15 minut. Może przyjmować różne argumenty za czas, który chcesz cofnąć, i zależy od niedopoziomowania. Można odwrócić za pomocą przeciwnego polecenia
:later
źródło
:later 8h
i skończyłem na dziś? : P:! [command]
wykonuje zewnętrzne polecenie, gdy jesteś w Vimie.Ale dodaj kropkę po dwukropku,
:.! [command]
a to zrzuci dane wyjściowe polecenia do bieżącego okna. To jest: . !
Na przykład:
Często używam tego do dodawania bieżącej daty do dokumentu, który wpisuję:
źródło
:.!date
jest napisanie „data” w wierszu, a następnie uruchomienie!$sh
(alternatywnie polecenie zawiera pustą linię i uruchom!jsh
). Spowoduje to poprowadzenie linii do powłoki „sh” i zastąpienie danych wyjściowych polecenia.:.!
jest tak naprawdę specjalnym przypadkiem:{range}!
, który filtruje zakres wierszy (bieżący wiersz, gdy zakres jest.
) za pomocą polecenia i zamienia te wiersze na dane wyjściowe. Uważam:%!
przydatny do filtrowania całe bufory.sed
, skoro można użyć podobnych wbudowanych poleceńed
/ex
? Spróbuj uruchomić:.s/old/new/g
;-)Niezupełnie niejasne, ale istnieje kilka bardzo przydatnych poleceń „usuń w”, takich jak ...
diw
aby usunąć bieżące słowodi(
aby usunąć w ramach bieżących parensdi"
aby usunąć tekst między cytatamiInne można znaleźć na
:help text-objects
źródło
de Usuń wszystko do końca słowa, naciskając. na życzenie twojego serca.
ci (xyz [Esc] - To jest dziwne. Tutaj „i” nie oznacza trybu wstawiania. Zamiast tego oznacza wewnątrz nawiasu. Ta sekwencja tnie tekst w nawiasie, w którym stoisz, i zastępuje go "xyz". Działa również w nawiasach kwadratowych i liczbowych - po prostu wykonaj ci [lub ci {odpowiednio. Oczywiście możesz zrobić di (jeśli chcesz tylko usunąć cały tekst bez wpisywania czegokolwiek. Możesz również zrobić
a
zamiast,i
jeśli chcę również usunąć nawiasy, a nie tylko tekst w nich.ci " - wycina tekst w bieżących cudzysłowach
ciw - wycina bieżące słowo. Działa to tak samo jak poprzednie, z wyjątkiem tego, że
(
jest zastąpione przezw
.C - wytnij resztę linii i przejdź do trybu wstawiania.
ZZ - zapisz i zamknij bieżący plik (WAY szybciej niż Ctrl-F4, aby zamknąć bieżącą kartę!)
ddp - przesuwa bieżącą linię o jeden wiersz w dół
xp - przesuń obecną postać o jedną pozycję w prawo
U - wielkie litery, więc
viwU
wielkie słowo~ - zmienia wielkość liter, a więc
viw~
odwraca obudowę całego słowaCtrl + u / Ctrl + d przewiń stronę o pół ekranu w górę lub w dół. Wydaje się to bardziej przydatne niż zwykłe stronicowanie pełnoekranowe, ponieważ ułatwia sprawdzenie relacji między dwoma ekranami. Dla tych, którzy nadal chcą przewijać cały ekran na raz, są Ctrl + f dla Forward i Ctrl + b dla Backward. Ctrl + Y i Ctrl + E przewijają w dół lub w górę o jedną linię na raz.
Szalone, ale bardzo przydatne polecenie to zz - przewija ekran, aby ta linia pojawiła się na środku. Jest to doskonałe do umieszczenia kodu, nad którym pracujesz, w centrum uwagi. Polecenia rodzeństwa - zt i zb - sprawiają, że ta linia jest górna lub dolna na ekranie, co nie jest tak przydatne.
% znajduje i przeskakuje do pasującego nawiasu.
de - usuń od kursora do końca słowa (możesz również
dE
usunąć, aż do następnej spacji)bde - usuń bieżące słowo od lewego do prawego separatora
df [spacja] - usuń aż do następnej spacji włącznie
dt. - usuń do następnej kropki
dd - usuń całą linię
ye (lub YE) - ciągnie tekst od tego miejsca do końca słowa
ce - przecina koniec słowa
pa - kopiuje bieżące słowo (zastanawia mnie, co robi „cześć”!)
yy - kopiuje bieżącą linię
cc - wycina bieżącą linię, możesz także zrobić
S
zamiast tego. Jest też dolna czapka,s
która odcina aktualny znak i przechodzi do trybu wstawiania.viwy lub viwc . Złap lub zmień bieżące słowo. Naciskaj
w
wiele razy, aby nadal wybierać kolejne słowa, użyj,b
aby przejść do tyłuvi { - zaznacz cały tekst w nawiasach rysunkowych. va {- zaznacz cały tekst, w tym {} s
vi (p - zaznacz wszystko w (s) i zamień na wklejony tekst
b i e przesuwają kursor słowo po słowie, podobnie jak zwykle Ctrl + strzałki . Definicja słowa jest jednak nieco inna, ponieważ kilka kolejnych delimiterów jest traktowanych jako jedno słowo. Jeśli zaczniesz od środka słowa, naciśnięcie przycisku b zawsze spowoduje przejście do początku bieżącego słowa, a każde kolejne b spowoduje przejście do początku następnego słowa. Podobnie i łatwy do zapamiętania
e
kursor przesuwa się na koniec bieżącego i każdego kolejnego słowa.podobnie jak
b
/e
, kapitałB
iE
przesuwaj kursor słowo po słowie, używając tylko białych znaków jako ograniczników.wielka litera D (weź głęboki oddech) Usuwa resztę linii po prawej stronie kursora, tak samo jak Shift + End / Del w normalnych edytorach (zauważ 2 naciśnięcia klawiszy - Shift + D - zamiast 3)
źródło
vity
ivitc
można je odpowiednio skrócić doyit
icit
..
).bye
nie działa, gdy znajdujesz się w pierwszym znaku tego słowa.yiw
zawsze tak jest.Jednym, który rzadko znajduję w większości samouczków Vima, ale jest NIESAMOWITE przydatny (przynajmniej dla mnie), jest
g; and g,
poruszać się (do przodu, do tyłu) przez listę zmian.
Pokażę, jak go używam. Czasami muszę skopiować i wkleić fragment kodu lub łańcucha, powiedz szesnastkowy kod koloru w pliku CSS, więc szukam, skaczę (nie dbając o to, gdzie jest dopasowanie), kopiuję go, a następnie przeskakuję z powrotem (g;) do miejsca, w którym Edytowałem kod, aby w końcu go wkleić. Nie trzeba tworzyć znaków. Prostsze
Tylko moje 2 centy.
źródło
'.
przejdzie do ostatnio edytowanej linii i`.
przejdzie do ostatnio edytowanej pozycji<C-o>
/<C-i>
do tego cały czas - lub zaznaczając swoje miejsce.Stwórz vima w edytorze szesnastkowym.
Odwracać.
Ostrzeżenie: jeśli nie edytujesz pliku binarnego (-b), możesz uszkodzić plik. - Josh Lee w komentarzach.
źródło
:%!xxd -r
żeby to cofnąćPonownie wybiera ostatni wybór wizualny.
źródło
Czasami ustawienie w .vimrc zostanie zastąpione przez wtyczkę lub polecenie automatyczne. Aby to debugować, użyteczną sztuczką jest użycie polecenia: verbose w połączeniu z: set. Na przykład, aby dowiedzieć się, gdzie ustawiono / rozbroiono cindenta:
Spowoduje to wyświetlenie czegoś takiego:
Działa to również z mapami i zaznaczeniami. (Dzięki joeytwiddle za zwrócenie na to uwagi.) Na przykład:
źródło
:verbose
można go również użyć przednmap l
lub whighlight Normal
celu ustalenia, gdzie ostatnio zdefiniowanol
mapę klawiszy lubNormal
podświetlenie. Bardzo przydatne do debugowania!:%TOhtml
Tworzy renderowanie HTML bieżącego pliku.
źródło
Nie jestem pewien, czy w ogóle liczy się to jako ciemne zakątek, ale dopiero się tego nauczyłem ...
będzie szarpał (kopiował) wszystkie wiersze zawierające „dopasuj” do
"a
/@a
register. ( Wielkie literyA
powodują, że vim dodaje szarpnięcia zamiast zastępować poprzednią zawartość rejestru.) Ostatnio często go używałem podczas tworzenia arkuszy stylów programu Internet Explorer.źródło
:v/PATTERN/d
Objaśnienie::v
jest skrótem dla:g!
, a:g
polecenie stosuje dowolne polecenie ex do linii.:y[ank]
działa i działa:normal
, ale tutaj najbardziej naturalną rzeczą jest po prostu:d[elete]
.:g/match/normal "Ayy
-normal
słowo kluczowe pozwala mu na uruchamianie poleceń w trybie normalnym (z czym prawdopodobnie lepiej znasz).Chcesz spojrzeć na swoją historię poleceń?
Następnie przejrzyj, edytuj i na końcu, aby wykonać polecenie.
Czy kiedykolwiek wprowadzałeś podobne zmiany w dwóch plikach i przełączałeś się między nimi? (Powiedz, pliki źródłowe i nagłówkowe?)
Następnie tabuluj w obie strony między tymi plikami.
źródło
q:
przez przypadek cały czas ...Vim otworzy na przykład adres URL
Fajnie, gdy musisz pobrać źródło strony w celach informacyjnych.
źródło
Makra mogą wywoływać inne makra, a także same siebie.
na przykład:
... usunie pierwsze słowo z każdego wiersza do końca pliku.
Jest to dość prosty przykład, ale pokazuje bardzo potężną funkcję vima
źródło
qqqqqifuu<Esc>h@qq@q
:normal! @a
aby zastosować makro do każdej linii w twoim zaznaczeniu.Zakładając, że masz wkompilowane wsparcie dla Perla i / lub Rubiego,
:rubydo
i:perldo
będziesz uruchamiał jednowierszowy Ruby lub Perl na każdej linii w zakresie (domyślnie cały bufor),$_
związany z tekstem bieżącej linii (minus nowa linia). Manipulowanie$_
zmieni tekst tego wiersza.Możesz użyć tego do robienia pewnych rzeczy, które są łatwe do zrobienia w języku skryptowym, ale nie są tak oczywiste przy użyciu wbudowanych Vim. Na przykład, aby odwrócić kolejność słów w wierszu:
Aby wstawić losowy ciąg 8 znaków (AZ) na końcu każdego wiersza:
Jesteś ograniczony do działania na jednej linii na raz i nie możesz dodawać nowych linii.
źródło
pydo
ipy3do
działaj dla Pythona, jeśli masz skompilowane wymagane wsparcie.^ O i ^ I
Idź do starszej / nowszej pozycji. Podczas poruszania się po pliku (przez wyszukiwanie, przenoszenie poleceń itp.) Vim pamięta te „skoki”, dzięki czemu możesz powtarzać te skoki do tyłu (^ O - O dla starych) i do przodu (^ I - tuż obok I na klawiaturze ). Uważam, że jest to bardzo przydatne podczas pisania kodu i wykonywania wielu wyszukiwań.
żołnierz amerykański
Przejdź do pozycji, w której tryb wstawiania został zatrzymany jako ostatni. Często się redaguję, a potem szukam. Aby powrócić do miejsca edycji, naciśnij gi.
gf
umieść kursor na nazwie pliku (np. dołącz plik nagłówka), naciśnij gf, a plik zostanie otwarty
gF
podobny do gf, ale rozpoznaje format „[nazwa pliku]: [numer linii]”. Naciśnięcie gF otworzy [nazwa pliku] i ustawi kursor na [numer linii].
^ P i ^ N
Automatyczne uzupełnianie tekstu podczas edycji (^ P - poprzednie dopasowanie i ^ N następne dopasowanie)
^ X ^ L
Podczas edycji kończy się w tym samym wierszu (przydatne do programowania). Piszecie kod, a następnie przypominacie sobie, że macie ten sam kod gdzieś w pliku. Po prostu naciśnij ^ X ^ L i pełny wiersz zostanie ukończony
^ X ^ F
Uzupełnij nazwy plików. Piszesz „/ etc / pass” Hmm. Zapomniałeś nazwy pliku. Wystarczy nacisnąć ^ X ^ F, a nazwa pliku jest zakończona
^ Z lub: sh
Przenieś tymczasowo do powłoki. Jeśli potrzebujesz szybkiego uderzenia:
źródło
^X^F
mojego zwierzaka zirytować jest to, że nazwy plików zawierają=
znaki, co zrobić zgniłe rzeczy w wielu okazjach (pliki INI, makefile itp.) Używamse isfname-==
do końca tej uciążliwościźródło
i10.0.0.1<Esc>Y254p$<C-v>}g<C-a>
Jest to fajna sztuczka, aby ponownie otworzyć bieżący plik z innym kodowaniem:
Przydatne, gdy musisz pracować ze starszymi kodowaniami. Obsługiwane kodowania są wymienione w tabeli w
encoding-values
(patrzhelp
encoding-values
). Podobne działanie również działa++ff
, dzięki czemu możesz ponownie otworzyć plik z zakończeniem linii Windows / Unix, jeśli popełnisz błąd po raz pierwszy (patrzhelp
ff
).źródło
Wpisanie == poprawi wcięcie bieżącej linii na podstawie powyższej linii.
W rzeczywistości możesz zrobić znak =, a następnie dowolne polecenie ruchu. = {ruch}
Na przykład możesz użyć% ruchu, który porusza się między pasującymi nawiasami klamrowymi. Ustaw kursor na {w następującym kodzie:
I naciśnij =%, aby natychmiast uzyskać:
Alternatywnie, możesz zrobić = { w bloku kodu, zamiast pozycjonować się bezpośrednio na znaku {.
źródło
=}
lubvaBaB=
dlatego, że jest mniej zależny. Równieżv}}:!astyle -bj
lepiej pasuje do mojego stylu kodu, ale mogę przywrócić go do twojego stylu za pomocą prostego%!astyle -aj
gg=G
jest całkiem fajne, kiedy coś wklejasz.ggVG=
.źródło
ii
ijj
są one powszechnie używane do zmiennych przeciwnych, ponieważi
ij
są zastrzeżone dla liczb zespolonych.Zobaczmy, jak jakiś ładny edytor IDE dokonuje transpozycji kolumn.
Wyjaśnienie
\(
i\)
jak pamiętać rzeczy w regex-land. I\1
,\2
etc jest jak odzyskać zapamiętane rzeczy.Zapamiętaj wszystko, a następnie
^I
(tab), a następnie wszystko.Zamień powyższe elementy na „2nd rzeczy, które zapamiętałeś”, a następnie „1st rzeczy, które zapamiętałeś” - zasadniczo dokonując transpozycji.
źródło
źródło
Nie do końca mroczny sekret, ale lubię umieszczać następujące mapowanie w moim pliku .vimrc, dzięki czemu mogę w dowolnym momencie nacisnąć „-” (minus), aby otworzyć eksplorator plików i pokazać pliki sąsiadujące z tym, który właśnie edytuję . W eksploratorze plików mogę nacisnąć inny „-”, aby przejść o jeden katalog w górę, zapewniając bezproblemowe przeglądanie złożonych struktur katalogów (takich jak te używane obecnie przez frameworki MVC):
Mogą być również przydatne dla kogoś. Lubię przewijać ekran i jednocześnie przesuwać kursor:
Nawigacja po kartach - uwielbiam karty i muszę łatwo się między nimi poruszać:
Tylko w Mac OS X: Nawigacja po kartach przypominających Safari:
źródło
Lubię używać „sudo bash”, a mój administrator nie znosi tego. Zablokował „sudo”, więc można go było używać tylko z kilkoma poleceniami (ls, chmod, chown, vi itd.), Ale i tak mogłem użyć vima, aby uzyskać powłokę roota:
źródło
Często lubię zmieniać bieżące katalogi podczas edycji - więc muszę mniej określać ścieżki.
źródło
Często korzystam z wielu okien podczas pracy nad projektem i czasami muszę je zmienić. Oto, czego używam:
Te mapowania pozwalają zwiększyć i zmniejszyć rozmiar bieżącego okna. To dość proste, ale szybkie.
źródło
Nie jest to nieznana funkcja, ale bardzo przydatna i oszczędzająca czas.
Jeśli chcesz zapisać sesję otwartych buforów, kart, znaczników i innych ustawień, możesz wydać następujące czynności:
Możesz otworzyć sesję za pomocą:
źródło
:so session.vim
wewnątrz vima.wkleja dane wyjściowe polecenia zewnętrznego do bufora.
Zrób trochę matematyki i uzyskaj wynik bezpośrednio w tekście:
Pobierz listę plików do skompilowania podczas pisania pliku Makefile:
Nie sprawdzaj tego, co czytasz na wikipedii, wklej go bezpośrednio do pisanego dokumentu:
źródło
Mapa F5, aby szybko ROT13 buforować:
Możesz użyć go jako klucza bossa :).
źródło
nmap i ggg?G``
. Lub diaboliczny:nmap i ggg?G``i
!Właśnie znalazłem ten dzisiaj za pośrednictwem NSFAQ :
Komentuj bloki kodu.
Wejdź do trybu blokowego, naciskając CTRL-V.
Zaznacz blok, który chcesz skomentować.
Naciśnij I (wielkie I) i wpisz ciąg komentarza na początku wiersza. (// dla C ++)
Naciśnij ESC, a wszystkie wybrane linie będą // poprzedzone na początku linii.
źródło
git checkout
). Jeśli chodzi o lepsze wykorzystanie wkładki blokowej, nie ma żadnego osadzenia w kamieniu. Po prostu używasz go, gdy masz wiele wierszy, w których chcesz wstawić tę samą sekwencję znaków w tym samym miejscu.Używam vima do niemal każdej edycji tekstu, więc często używam kopiowania i wklejania. Problem polega na tym, że vim domyślnie często zniekształca importowany tekst za pomocą wklejania. Sposobem na powstrzymanie tego jest użycie
przed wklejeniem danych. Pozwoli to uniknąć bałaganu.
Pamiętaj, że będziesz musiał wydać
:set nopaste
polecenie odzyskania automatycznego wcięcia. Alternatywnymi sposobami wklejania wstępnie sformatowanego tekstu są rejestry schowka (*
i+
) oraz:r!cat
(trzeba będzie wkleić wklejony fragment za pomocą ^ D).Czasami pomocne jest również włączenie schematu kolorów o wysokim kontraście. Można to zrobić za pomocą
Zauważyłem, że nie działa na wszystkich wersjach vima, których używam, ale działa na większości.
źródło
set paste
lub określanie klawisza dlapastetoggle
opcji jest powszechnym sposobem obejścia tegoset mouse=a
problemu , ale ten sam efekt można osiągnąć, ponieważ wtedy Vim wie, że zalew tekstu, który widzi, jest pastą uruchamianą przez mysz."*p
aby wkleić z Xlipboarda. (Działa również z terminalowego vima, po prostu może być potrzebny pakiet gvim, jeśli są one oddzielne)*
jestPRIMARY
( "middle-click") rejestr. Schowek jest+