vim script에서...
반갑습니다.
vim script를 공부하고, 간단하게 활용하려고 script를 짜봤는데...
에러는 나지 않는데 제대로 동작을 하지 않네요.
script의 기능은 현재라인을 읽어서
1. 공백을 제거하고
2. "," 로 split하여 각요소를 현재 화일을 끝에 한 라인씩 추가하는건데..
예를 들면 현재 라인이 아래와 같다면
aa, bb, cc , dd
스크립터를 실행후는
aa, bb, cc , dd
aa
bb
cc
dd
이런 모양이 되어야 하는데...
function! ChgItem()
" let str = getline('.')
let str = "aa, bb , cc, dd"
let st = substitute(str, ' ', '', 'g')
let lst = split(st, ',')
"echo lst
let eol = line('$')
let eol = eol + 1 <--------- (1
echo eol <---------- (2
for item in lst
let eol = eol+1
call setline(eol, item)
endfor
endfunction
위의 (1 부분이 있으면, (2 까지 실행된후 멈추어버리는것 처럼 보입니다.
해서 (1 부분을 제거하고 실행하면 제대로 실행이 됩니다.
혹시나 해서 debug를 해보니
아래 for 까지 제대로 수행은 되는데, 화일에 덧 붙여 쓰이지가 않네요.
vimscript는 자료가 부족해서 찾아보기도 힘든 상황이네요.
혹 위의 문제에대해서 조언을 주시거나, 찾아볼 자료가 있으면 알려주시면 감사하겠습니다.
좋은 저녁되세요.
[완료] 자문 자답...
vim script에 익숙하지 않다보니...
vim script에서 현재 화일의 라인보다 더 큰 라인번호로 화일에 쓰기를 하면
에러도 없이 그냥 넘어가버리네요.
위의 script를 보니
먼저 화일의 라인을 구하고, 1라인 추가하고,
그리고 for루프 내에서 1라인 더 추가하는데 : 화일끝에 한줄 추가후, 새로운 내용를 추가하려고...
그런데 그렇게 하려면 먼저 1라인 추가후 setline()함수를 호출해서 실제로 한 라인을 추가해야 하네요.
쩝..보통의 언어인 경우에는 에러를 낼거 같은데...
암튼 좋은 경험한거 같습니다.
http://learnvimscriptthehardw
http://learnvimscriptthehardway.stevelosh.com/
시간 날 때 한 번 읽어 보세요. 단순 명료한 해설이 좋습니다.
.vimrc를 단계적으로 바꿔 나가면서 vimscript에 대해 알려 줍니다.
--
마잇
네 감사히 보겠습니다.
사이트를 둘러보니 정리가 잘된거 같네요.
그런데 근무하는곳이 인터넷이 안되는 곳이라...
저걸 html로 다운받을수 있음 좋겠는데...
아직 출판도 안된거라고 하고...
암튼 감사합니다.
댓글 달기