2008-11-05 12 views

Odpowiedz

11

Jeśli chcesz przekazać bieżący numer linii do linii poleceń, można zrobić

:exe "!echo " . line(".") 
+1

Witam, To jest niesamowita odpowiedź. dokładnie to, czego szukałem. – akshat

+0

Dzięki za brakujący składnik dla mojej linii i dołącz wyjście ": exe" r! " . getline (".") ' – bsb

13

. (kropka) oznacza bieżącą linię.

Dla wyjaśnienia: ta jest przeznaczona na rzeczy, jak :1,.s/foo/bar/g które zmienią każdy foo do bar od początku pliku do bieżącej linii.

Nie wiem, znam sposób, aby uzyskać bieżący numer wiersza rozszerzony na polecenie powłoki, która jest, co chce zrobić, wykonując :!echo .

można dowiedzieć się o ekspansji, które są zrobione (na przykład % i #) w :he cmdline-special.

+0

To nie działa. Kiedy wydaję polecenie :! Echo. Dane wyjściowe to tylko "." zamiast oczekiwanego numeru linii. – akshat

+0

Nie, to nie działa, zobacz moje wyjaśnienie. Może, jeśli zadasz kolejne pytanie, w którym szczegółowo wyjaśnisz swój planowany skrót, możemy Ci pomóc w inny sposób osiągnięcia tego, co zamierzasz. – WMR

+0

dzięki WMR. patrząc wstecz na moje pytanie zdaję sobie sprawę, że nie wyjaśniłem poprawnie mojego wymogu. PS: Spojrzałem na cmdline-special, ale nie znalazłem tego. Miałem nadzieję, że jest coś, o czym nie wspomniano. – akshat

1

poleceń w vim działa na bieżącej linii tak:

:s/foo/bar/g 

przekształci każdy foo w pasku na linii jesteś obecnie.

+0

Myślę, że "g" spowoduje, że będzie on zastępował globalnie w całym pliku. –

+0

Nie, w tym przypadku "g" spowoduje, że wyrażenie regularne zostanie zastosowane globalnie do bieżącego wiersza. – Tomalak

+1

Aby to zrobić globalnie, musisz umieścić:% s/foo/bar/g LUB: 1, $ s/foo/bar/g –

2

Aby powrócić numer wiersza bieżącej linii w dolnej części ekranu, należy:

:.=  
Powiązane problemy