vimscript에서 list관련..

armadillo의 이미지

반갑습니다.

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에서 사용될때는 다른 형식이 되어야 하는건지..

혹시 참고할만한 자료가 있으면 부탁드리겠습니다.
아니면 조언도 감사하겠습니다.

좋은 주말되세요.