Czy istnieje sposób wstawienia „ ” w tej samej kolumnie, ponieważ wszystkie linie nie są tej samej długości, więc linia 1 może mieć „ ” w 15 kolumnie, ale linia 2 ma „*” w 25 kolumnie.
Aman Jain
11
jest tylko 1 EOL na linię, więc gflaga jest niepotrzebna.
doubleDown,
Chciałem dodać / na początku każdej linii: 1, $ s / ^ / \ / g działało dla mnie.
farooqsadiq
@dirkgently Jak mogę przekazać zmienną łańcuchową jako argument do tego polecenia (wiesz, zamiast *)?
Matheus Rotta
353
Nawet krótszy niż polecenie: search:
:%norm A*
Oto co to znaczy:
%=for every line
norm = type the following commands
A*= append '*' to the endof current line
Człowieku, nie istnieje wątek vi ani vim, z którego niczego się nie uczę. Dziś uczę się o normie. I jak mówią na zdrowie, „Norm!”
smcameron
4
Do poprzedzania użyjesz 0i *, 0 prowadzi do początku linii, i dla trybu wstawiania i * dla *. D:
Rob
7
Jako VimGolfer nie mogę nic poradzić na to, że dodaję to, I*zamiast 0i*oszczędzać jeden klawisz.
Jedidiah Hurt
24
Jeszcze jedna wskazówka: Działa to również dla zakresów. Wystarczy podświetlić linie w trybie wizualnym i nacisnąć :, spowoduje to wstępne wypełnienie polecenia, w :'<,'>które można się następnie przekształcić:'<,'>norm A*
Jedidiah Hurt
8
Aby dokonać dodania, użyj Izamiast tego -:%norm I*
Ahhh ... Drugi może być również używany z wyborem linii. Miły!
Tim Fletcher
Czy mógłbyś wyjaśnić pierwszy przykład?
Cody Poll
@CodyPoll gto globalpolecenie, które robi coś z każdą pasującą linią. $pasuje do każdej linii. Może to być również ^lub .*. norm wykonuje polecenia, których zwykle używasz w trybie poleceń. Tak więc A*środki dołączania *do końca linii.
defhlt
41
Myślę, że użycie trybu blokowania wizualnego jest lepszą i bardziej wszechstronną metodą radzenia sobie z tego typu rzeczami. Oto przykład:
Thisis the First line.Thisis the second.The third.
Aby wstawić „Witaj świecie”. (spacja + schowek) na końcu każdej z tych linii:
Na znaku w pierwszym wierszu naciśnij Ctrl-V (lub Ctrl-Q, jeśli Ctrl-V to wklej).
Naciśnij jj, aby rozszerzyć blok wizualny na trzy linie.
Naciśnij $, aby rozszerzyć blok wizualny na koniec każdej linii. Naciśnij A, a następnie spację, a następnie wpisz Hello world. + następnie Esc.
Wynik to:
Thisis the First line.Hello world.Thisis the second.Hello world.The third.Hello world.
Zamiast naciskać jjmożna nacisnąć, Gaby przejść do ostatniej linii. Jest to przydatne w dużych plikach, w których naciśnięcie jdo momentu przejścia do ostatniej linii nie jest praktyczne.
nash
Zgadzam się, że blok wizualny jest tutaj najczystszy, również bardziej rozszerzalny
Peter Dolan
Zauważ, że na początku nie wydaje się, żeby działało na wszystkich liniach, ale po naciśnięciu Esc przechodzi i dodaje do wszystkich.
Noumenon,
Blok wizualny powoduje problemy i błędy przy korzystaniu z vima jako rozszerzenia innych rzeczy, takich jak VS Code. W takich przypadkach wyszukiwanie i zamiana, o którą prosi pierwotny użytkownik, jest niezawodną opcją.
Brettins,
upewnij się, że używasz dużej litery A, mała litera „a” nie działa.
Jeff Hoye
14
Jeśli chcesz dodać Hello world na końcu każdej linii:
:%s/$/HelloWorld/
Jeśli chcesz to zrobić dla określonej liczby linii, powiedz, od 20 do 30 użyj:
:20,30s/$/HelloWorld/
Jeśli chcesz to zrobić na początku każdej linii, użyj:
To znajdzie każdą kotwicę końca linii i zastąpi ją *. Mówię „zamiennik”, ale w rzeczywistości jest to raczej dodatek, ponieważ kotwica jest specjalną rzeczą, a nie zwykłą postacią. Aby uzyskać więcej informacji, zobacz Moc g - Przykłady .
Co oznacza s // w wyrażeniu regularnym? Znam podobne polecenie: g / / / p, (grep). Jestem prawie pewien, że twoje polecenie jest bliskie mojemu, przynajmniej w strukturze.
Léo Léopold Hertz
1
S jest substytutem - zastępuje zakotwiczenie końca linii gwiazdką (cóż, właściwie nie zastępuje go, ponieważ jest to punkt zakotwiczenia).
paxdiablo
3
:% s / \ n / * \ r / g
Twój pierwszy jest poprawny gdzie indziej, ale z jakiegoś powodu Vim musi mieć inną obsługę nowej linii.
:s///
,\n
odpowiada znak NULL. Ta sekcja:help sub-replace-special
jest istotna.Odpowiedzi:
:%s/$/\*/g
powinno działać. Tak powinno,
:%s/$/*/g
jak słusznie wskazuje MrWiggles .źródło
g
flaga jest niepotrzebna.Nawet krótszy niż polecenie: search:
Oto co to znaczy:
źródło
I*
zamiast0i*
oszczędzać jeden klawisz.:
, spowoduje to wstępne wypełnienie polecenia, w:'<,'>
które można się następnie przekształcić:'<,'>norm A*
I
zamiast tego -:%norm I*
Również:
Również:
źródło
g
toglobal
polecenie, które robi coś z każdą pasującą linią.$
pasuje do każdej linii. Może to być również^
lub.*
. norm wykonuje polecenia, których zwykle używasz w trybie poleceń. Tak więcA*
środki dołączania*
do końca linii.Myślę, że użycie trybu blokowania wizualnego jest lepszą i bardziej wszechstronną metodą radzenia sobie z tego typu rzeczami. Oto przykład:
Aby wstawić „Witaj świecie”. (spacja + schowek) na końcu każdej z tych linii:
Wynik to:
(przykład z Vim.Wikia.com )
źródło
jj
można nacisnąć,G
aby przejść do ostatniej linii. Jest to przydatne w dużych plikach, w których naciśnięciej
do momentu przejścia do ostatniej linii nie jest praktyczne.Jeśli chcesz dodać Hello world na końcu każdej linii:
Jeśli chcesz to zrobić dla określonej liczby linii, powiedz, od 20 do 30 użyj:
Jeśli chcesz to zrobić na początku każdej linii, użyj:
źródło
Tak naprawdę nie potrzebujesz
g
na końcu. Więc staje się:Lub jeśli chcesz tylko
*
na końcu, powiedz wiersze 14-18:lub
źródło
... i do dodania (dodaj początek) każdej linii za pomocą *,
źródło
Jedną z opcji jest:
To znajdzie każdą kotwicę końca linii i zastąpi ją
*
. Mówię „zamiennik”, ale w rzeczywistości jest to raczej dodatek, ponieważ kotwica jest specjalną rzeczą, a nie zwykłą postacią. Aby uzyskać więcej informacji, zobacz Moc g - Przykłady .źródło
Twój pierwszy jest poprawny gdzie indziej, ale z jakiegoś powodu Vim musi mieć inną obsługę nowej linii.
źródło
to załatwi sprawę i sprawi, że wiodące spacje zostaną zignorowane.
źródło