Vim에서 문자열을 어떻게 "숨길"수 있습니까?


32

다음과 같은 vimscript를 실행한다고 가정 해보십시오.

let @z = system("date")

이것은 현재 날짜의 문자열 버전을 z 레지스터에 넣지 만 문자열은 원하지 않는 줄 바꿈으로 끝납니다. chomp문자열의 후행 줄 바꿈을 제거 하는 기본 제공 방법이 있습니까 (Perl과 유사 )?

답변:


24

을 사용 substitute()하거나 함수를 정의 할 수 있습니다 .

function! Chomp(string)
    return substitute(a:string, '\n\+$', '', '')
endfunction

이 변형은 system당신 을 요구 하고 결과를 mp니다 :

function! ChompedSystem( ... )
    return substitute(call('system', a:000), '\n\+$', '', '')
endfunction

(이 기능은 내에서 사용할 수 잉고 라이브러리 플러그인ingo#system#Chomped.)


이것은 효과가 있지만 왜 이상한 call구문입니까? 왜 그냥 포기하지 Chomp라는 매개 변수를 string다음 통과 a:stringsubstitute?
bdesham

2
@bdesham Chomp()모든 인수를 전달 하기 때문에 system()출력에서 후행 줄 바꿈을 제거하고 반환합니다.
jamessan

권리. system()선택적 {input}인수가 있으며, 이는 일반적으로 이들 중 하나를 처리합니다. 이것이 필요하지 않은 경우, 일반적인 방식으로 수행하십시오.
Ingo Karkat

25
let @z = systemlist('date')[0]

줄 바꿈을 제거합니다.


나는 이것이 실제로 사용할 접근법이라고 생각하지만, 더 일반적으로 적용 가능하기 때문에 다른 대답을 받아 들였다. (예를 들어, 다른 줄 바꿈 만 남겨두고 여러 줄 문자열에서 줄 바꿈 개행을 제거합니다.)
bdesham

5
이것은 \n개행 이외의 것을 사용하는 시스템에서는 올바르게 작동하지 않습니다 . systemlist()단지를 제거 \n하지 어느 \r.
jamessan

4

Christian Brabandt는 superuser.com 에서 여러 가지 방법 을 나열 했습니다 .

나는 이것이 짧기 때문에 이것을 좋아합니다.

let @z = system("date")[:-2]

\r\n줄 끝을 어떻게 처리하는지 궁금합니다 .
x-yuri

@ x-yuri 확실히 확인할만한 가치가 있습니다. 이것에 대해 인용하지 마십시오.하지만 Vim-on-Windows는 줄 끝을 반환 하기 전에 정규화 할 것이라고 생각\n 합니다.
joeytwiddle
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.