vimscript에서 list관련..
반갑습니다.
vimscript를 배우면서 작은 script를 짜는데 제대로 동작을 안합니다.
script의 기능은
하나의 필드들이 하나의 라인으로 된 화일을 읽어서 후행공백(trailing spaces)을 없애고
다시 저장하는것인데...후행 공백 처리가 되지 않네요.
function! GetData()
let lst_line = line('$')
let col_size = 5
let item = ''
let items = []
let out_items = []
let items = getline(1, lst_line)
echo items
let out_items = map(copy(items), "substitute(v:val, '\s\+$', '', '') ") <-- 후행공백 제거
"
" let out_items = map(copy(items), "substitute(v:val, 'aa', 'ZZZZZZZZZZ', '')") <-- 1
" let out_items = map(copy(items), 'toupper(v:val)') <-- 2
for item in out_items
echo '[' . item . ']'
" echo '[' . substitute(item, '\s\+$', '', 'g') . ']' <-- 3
endfor
endfunction
<-- 후행공백 제거라고 표시한 부분이 제대로 동작하지 않아서
1) 혹시 substitute() 함수 사용이 잘못되었나 확인하려고 '<-- 3'으로 테스트해보니 이상없이 동작하고
2) map에서 함수 사용방법이 문제가 있나해서 '<--2'로 확인해봐도 이상이 없고
3) map에서 substitute()함수에서 문자열 치환의 방법이 문제가 있나 해서 '<-- 1'으로 해도 정상동작하는데...
왜 이런지 모르겠습니다.
현재 내린 결론은 substitute(v:val, '\s\+$', '', '')에서
'\s\+$' 부분인거 같은데, substitute()함수가 map에서 사용될때는 다른 형식이 되어야 하는건지..
혹시 참고할만한 자료가 있으면 부탁드리겠습니다.
아니면 조언도 감사하겠습니다.
좋은 주말되세요.
댓글 달기