Mam plik z linią, która wygląda następująco:
foofoo.xy.barbar
Chcę zmienić xy
TO gh
. Starałem się zrobić 2r-> gh, ale oczywiście, że nie działa, gdyż otrzymuje xy
się gg
, a następnie przeniósł mój kursor jedno miejsce w lewo.
Czy można to zrobić bez wchodzenia w tryb wstawiania lub bez użycia znacznie większej liczby naciśnięć klawiszy (np. :s/xy/gh/)?
replace
repeated-commands
durron597
źródło
źródło
R
wchodzi w tryb wymiany.:help replace-mode
po więcej informacji.vt.rgh
. Ale wynik był taki sam jak twój, z wyjątkiem pozycji kursora.cwgh<esc>
działałoby dobrze.minimize-keystrokes
to dobry tag, to nie jest zwykle naprawdę to, co jest pytanie o jako taki. (Odrzuciłem proponowane przez ciebie zmiany) ... Może powinieneś porozmawiać na meta?Odpowiedzi:
Jeśli nowy tekst ma taką samą długość jak stary tekst, tryb zastępowania Vima jest opcją. Z trybu normalnego R(to jest wielkie „r”) przenosi cię do trybu zastępowania. Jest to podobne do „zastępowania” w niektórych innych edytorach tekstu: zamiast wstawiać nowe znaki, jak w trybie wstawiania, pisanie zastąpi znak pod kursorem, a następnie przejdzie do następnego kursora. (Pomyśl o tym jak o małych literach
r
, ale więcej niż o jednym znaku na raz.) Znajdź dokumentację dotyczącą trybu zastępowania:help replace-mode
.W twoim przypadku: kursorem pomiędzy
.
i przejdźx
do trybu zastępowania, naciskając R. Teraz, gdy gpiszesz, zamienia „x” i przechodzi do następnego znaku, więc możesz pisać, haby zastąpić „y”. Twoja edycja jest teraz zakończona, więc Escapepowróć do normalnego trybu.(Działa to, gdy tekst zastępujący ma taką samą długość jak stary tekst, ale jeśli zastąpienie jest dłuższe lub krótsze,
c
może być wszystkim, czego potrzebujesz: zastąpi 1 tekst w ruchu, a następnie tekst, który następnie wpiszesz. wiele sposobów, aby uczynić stosowaniec
, na przykład: z kursorem między.
ix
, ct.ABC
Escapemówi c mień tekst (up ' t il następnego.
) z «ABC»).1 Pociągnie tekst w ruchu do nienazwanego /
"
rejestru, a następnie przełączy się do trybu wstawiania, aby można było wpisać coś, co go zastąpi, a następnie z Escapepowrotem do trybu normalnego.źródło
n
zastępującą do-tegon
wystąpienia znaku docelowego. Jest to przydatne do zastępowania części etykiet formatemw_x_y_z
ia-b-c-d
. Użyjf
zamiast,t
aby usunąć również ograniczający znak.Można to zrobić na kilka sposobów, ale najprostszy, jaki mogę wymyślić, to:
TL; DR
fxcw<REPLACEMENT TEXT>
Wyjaśnienie
fx
skacze do x (patrzhelp *f*
)cw
mówi, aby zmienić słowo (patrz:h *c*
,:help *w*
i:help cw
uzyskać więcej informacji), usuwając tekst „xy” i wchodząc w tryb wstawiania, umożliwiając wstawienie tam, co chcesz.Zaletą tego podejścia jest to, że używa on bardzo często używanych poleceń do manipulacji tekstem i nawigacji. Innym jest to, że „xy” może mieć dowolną długość, a to i tak będzie działać.
Te
cw
prace, ponieważ obiekt jest tekst otoczony okresów (.
), które działają jako granica do słowa.Jeśli kursor znajduje się już na znaku „y” (lub dowolnym znaku w tekście, który ma zostać zastąpiony), możesz użyć
ciw<REPLACEMENT TEXT>
. To mówi vimowi, aby zmienił słowo, w którym się znajdujesz, nawet jeśli nie jesteś na początku. Zobacz:help text-objects
więcej informacji na tematciw
obiektów tekstowych w ogóle.źródło
Tryb zamiany:
jest najbardziej oczywistym rozwiązaniem, jeśli zamiennik ma taką samą długość jak oryginał, ale możesz także:
lub:
źródło