2017-05-22 32 views
5

Oto początkowy tekst.Jak utworzyć ciągi znaków w określonej linii w edytowanym tekście?

test1 
test2 

Tylko dwa wiersze w tekście.

Chcę wstawić ciągi sekwencji z 5 linii do 16 linii. Próbowałem go z poniżej kodów.

for i in range(1,12) 
    echo ".item".i."," 
endfor 

1.tekst początkowy.
enter image description here 2.to wejść do trybu poleceń i wprowadzania kodów

enter image description here

dwa problemy do rozwiązania.
Polecenie 1.echo wypisz pierwszy ciąg .item1 przed zakończeniem.

for i in range(1,12) 
    echo ".item".i."," 

2.How tworzenia sekwencji łańcuchów na określonej linii: od 5 do 16 w edytowanego tekstu z vimscript?

Pożądany wynik jest jak poniżej.

enter image description here

Prawie gotowe!
Co ja dostać jest poniżej poleceniem :pu! =map(range(1,12), 'printf(''item%1d'', v:val)').

Oba nie mogą działać.

:5pu! =map(range(1,12), 'printf(''item%1d'', v:val)') 
:5,16pu! =map(range(1,12), 'printf(''item%1d'', v:val)') 

enter image description here

Ostatnią kwestią dla mojego pożądanego formatu jest, gdy kursor znajduje się na 3th linii, jak stworzyć pożądany wynik?

+2

Czy masz na myśli coś takiego 'pu! = mapa (zakres (1,16), 'printf (' 'element% 1d' ', v: val)') '? Jeśli nie, powinieneś pokazać pożądane wyniki.Mam problem z określeniem, czego potrzebujesz. –

Odpowiedz

4

Aby wstawić brakujące linie, bez wkładania usunąć niepotrzebne pustych wierszy (->append() + repeat([''], nb) + możliwe negatywne nb)

:let lin = 5 - 1 
:call append('$', repeat([''], lin-line('$'))) 

Następnie, w celu wstawienia co szukasz (bez konieczności dla printf() jeśli nie chcesz formatować numery)

:call append(lin, map(range(1,12), '"item".v:val')) 

PS: wolałbym uniknąć :put kiedy tylko mogę, jak to niby trudne do wykorzystania złożonych wyrażeń.

1

Zakładając, że korzystasz z systemu operacyjnego opartego na systemie Unix, masz polecenie seq. Więc można zrobić:

$ seq -f 'Item %.0f' 20 
Item 1 
Item 2 
... 
Item 20 

Wewnątrz vim można spróbować odczyt z zewnętrznego polecenia podejście:

:r! seq -f 'Item \%.0f' 20