2012-09-09 3 views
1

Vim에 슬림 파일을 쓰고 있습니다. 저장할 때 파일을 컴파일하고 html 파일로 저장하려고합니다. 내 .vimrc 파일에 이것을 추가하면 현재 디렉토리에있는 파일 일 수 있습니다 : 잘라 내기 명령이 ./file.slim로 바뀝니다 이후Vim은 프로그래밍 방식으로 다른 파일 확장명으로 저장합니다.

au BufWritePost *.slim silent !slimrb % > $(echo % | cut -d'.' -f1).html

그것은 ../file.slim 같은 경로로 파일을 작동하지 않습니다.

Vim에서 외부 명령을 실행할 때 parameter expansions을 사용해야하지만 % 문자는 현재 파일 경로로 예약되어 있습니다.

파일의 디렉토리에 관계없이 슬림 파일을 컴파일하고 html 파일에 저장하려면 어떻게해야합니까?

답변

1
au BufWritePost *.slim :silent call system('slimrb '.shellescape(expand('%')).' > '.shellescape(expand('%:r').'.html')) 

au BufWritePost *.slim silent !slimrb % > %:r.html

을 사용하려면 자동 컴파일하고 HTML 파일로 슬림 한 파일을 저장합니다. 특수 문자를 포함하지 않는 파일 이름을 가진 gvim에서이 작업은 silent !slimrb % > %:r.html처럼 작동하지만 터미널 vim에서는 파일 이름에 개행을 제외한 특수 문자가 포함되어있을 때 화면을 비우지 않으며 ( silent이이를 방지하지 못함) 작동합니다.

au BufWritePost *.slim :execute 'silent !slimrb' shellescape(@%, 1) '>' shellescape(expand('%:r').'.html', 1) | redraw! 

또는 사용자 정의 shellescape 함수를 작성 : 다음 사용해야 할 줄 바꿈 처리합니다.

1

%:r을 사용하여 Vim에서 확장을 다듬을 수 있다는 것을 깨달았습니다. 내가

+3

이제 파일 이름에 공백, 달러, 따옴표, 기타 셸 특수 기호가 포함 된 경우에도 동일한 작업을 시도하십시오. 여기서해야 할 일은'au BufWritePost * .slim : 자동 호출 시스템 ('slimrb'.shellescape (expand ('%')) '>'.shellescape (expand ('% : r'). '입니다. '))'. 그건 그렇고, 당신은 쉘에 백분율 기호를 전달할 수 있습니다. 단지': execute' +'shellescape()'를 사용할 때 : shellescape (str, 1)로 두번째 인수를 주목하십시오.) 또는 특별한 방법으로이 기호를 처리하지 않는'system()'을 사용하십시오. – ZyX

+0

이것은 훨씬 더 나은 해결책 인 것 같습니다. 답변으로 게시하면 받아 들일 것입니다. –

관련 문제