2017-05-22 1 views
5

다음은 초기 텍스트입니다.편집 된 텍스트에서 지정된 줄에 문자열 시퀀스를 만드는 방법은 무엇입니까?

test1 
test2 

텍스트에는 두 줄만 있습니다.

다섯 번째 줄부터 16 번째 줄에 문자열 시퀀스를 삽입하고 싶습니다. 아래 코드를 사용해 보았습니다.

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

1 초기 텍스트.
enter image description here 2.to 명령 모드 입력에

enter image description here

두 가지 문제를 해결할 수있는 코드를 입력.
1.echo 명령은 endfor 전에 첫 번째 문자열 .item1을 출력합니다.

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

2. 지정된 줄에 문자열 시퀀스를 만드시겠습니까? vimscript로 편집 한 텍스트의 5 번째에서 16 번째까지?

원하는 결과는 다음과 같습니다.

enter image description here

가 거의 완료!
는 내가 뭘 얻을하는 명령 :pu! =map(range(1,12), 'printf(''item%1d'', v:val)')으로 다음과 같습니다.

둘 다 작동하지 않습니다. 내 원하는 형식에 대한

: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

마지막 문제 는 커서가 제 3 회 라인에 언제, 어떻게 원하는 출력을 생성하는 것입니다? 당신이 (필요가 없습니다 무엇을 찾고 있는지 삽입하기 위해,

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

다음 - (nb 부정적인>append() + repeat([''], nb) + 수)를 unrequired 빈 줄을 삽입하지 않고, 누락 된 라인을 삽입하기 위해

+2

는이'우레탄 같은 것을 의미합니까! = map (범위 (1,16), 'printf (' ''% 1d '', v : val) ')'? 그렇지 않은 경우 원하는 출력을 표시해야합니다.나는 당신이 필요로하는 것을 결정하는 데 어려움을 겪고 있습니다. –

답변

4

printf() 당신은)

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

PS를 숫자를 포맷하지 않으려면 : 그것은 복잡한 식으로 사용하는 종류의 어려운로 할 때 내가 할 수있는 내가 오히려 :put을 피할 것.

1

사용자가 Unix 기반 운영 체제라고 가정 할 경우 seq 명령이 있습니다. 그래서 당신은 할 수 있습니다 : vim 내부

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

외부 명령에서 접근 방식을 읽는 을 시도 할 수 있습니다 :

:r! seq -f 'Item \%.0f' 20 
관련 문제