2010-02-26 3 views
13

현재 제 직업에서 일반적으로 따르는 것과는 다른 코딩 스타일 표준이 있습니다. 다행히도 검토 과정에 제출하기 전에 파일을 다시 포맷 할 수있는 perltidy 용 RC 파일이 있습니다.버퍼에서 perltidy를 실행하기 위해 vim을 스크립팅하는 방법은 무엇입니까?

나는 버퍼를 통해 명령을 실행하고 출력에 버퍼를 바꿀 때 사용하는 이맥스 코드를 가지고있다. 하지만 때로는 이맥스와 vim을 번갈아 가며 동일한 기능을 원합니다. 나는 이것 또는 유사 무언가가 간단하고 많은 시간 끝났고 다시 이루어 졌다고 확신합니다. 그러나 나는 내가 원하는 것을하는듯한 vim-script의 예를 발견하지 못했다. 본질적으로 핵심 콤보 (Ctrl-F6과 같은, 내가 emacs에서 사용하는 것)를 칠 수 있고 버퍼가 perltidy에 의해 즉석에서 다시 포맷되도록 할 수 있습니다. 나는 편안한 vim 사용자이지만, 나는 이런 종류의 것을 vim을 위해 쓰는 데 전혀 단서가 없다.

+3

과의 호환성을 위해 mikew의 코멘트 @ 통합 할 DoTidy() 업데이트, 데미안 콘웨이 모두 보여주고있다 developerWorks에 대한 일련의 멋진 정력 가지의 종류 : http://www.ibm.com/developerworks/linux/library/l-vim-script-1/index.html는 –

답변

8

외부 프로그램으로 전체 버퍼를 필터링하는 명령은 : 추가 재미 들어

:nmap <C-F6> :%!command<CR> 

:

:%!command 

일반 모드에서는 Ctrl-F6에 바인딩 ~/.vimrc에서 다음 넣어 :

:au Filetype perl nmap <C-F6> :%!command<CR> 

이렇게하면 Perl 파일을 편집 할 때만 필터가 매핑됩니다.

+1

초기을 제거의 .vimrc에 넣어합니다. 편집기 내에서 명령 행을 시작하기 위해서만 필요합니다. –

8

내 정돈 명령 : 당신이 시각적 인 선택을 사용하거나 범위를 제공하는 경우

command -range=% -nargs=* Tidy <line1>,<line2>! 
    \perltidy (your default options go here) <args> 

다음은 그렇지 않은 경우는 전체 파일을 사용합니다, 선택한 범위를 정돈합니다. (your default options go here)을 작성한 지점에 기본 옵션 집합 (있는 경우)을 넣을 수 있지만 :Tidy에 제공하는 인수는 기본값을 무시하고 perltidy 명령 줄에 추가됩니다. (.perltidyrc을 사용하는 경우 기본 args가 없을 수도 있습니다. 괜찮습니다.하지만 다시 한 번 기본 설정을 --profile=vim으로 설정하면 vim에서 작업 할 때만 기본값을 설정할 수 있습니다.

0

나는 라인 중심의 시각 시프트 + V를 사용하여 텍스트를 선택하는 데있어 다음 나는 를 누릅니다는 그래서 내가 한 번 치거나 화살표 까지 더 역사 어딘가에 !perltidy -pbp -et4 있습니다.

command -range=% -nargs=* Tidy <line1>,<line2>!perltidy -q 
noremap <C-F6> :Tidy<CR> 

그리고 또 다른 단계 : 한 단계 더 홉스 '대답을 촬영

4

, 당신은 키 바로 가기에 그 명령을 매핑 할 수 있습니다 당신은 아마 당신 때문에 (펄 버퍼에있을 경우에만 명령을지도) 다른 언어에 perltidy 실행하고 싶지 않아요 :

autocmd BufRead,BufNewFile *.pl,*.plx,*.pm command! -range=% -nargs=* Tidy <line1>,<line2>!perltidy -q 
autocmd BufRead,BufNewFile *.pl,*.plx,*.pm noremap <C-F6> :Tidy<CR> 

지금 당신은 전체 파일을 포맷하는 활성 선택하지 않고 Ctrl 키 F6을 누르면, 또는 활성 선택과 바로 그 부분을 포맷 할 수 있습니다.

10

대답을 시도한 후 전체 버퍼를 perltidy으로 필터링 할 때 커서가 바이트 1로 돌아 왔고 원래의 줄 번호에 대한 정신적 메모를 작성해야만했습니다. 따라서 :Tidy을 완료 한 후 다시 돌아갈 수있었습니다.

그래서 @hobbs에 '와 이그나시오의 답변 @ 구축, 나는 내 .vimrc에 다음과 같은 추가 :)

"define :Tidy command to run perltidy on visual selection || entire buffer" 
command -range=% -nargs=* Tidy <line1>,<line2>!perltidy 

"run :Tidy on entire buffer and return cursor to (approximate) original position" 
fun DoTidy() 
    let l = line(".") 
    let c = col(".") 
    :Tidy 
    call cursor(l, c) 
endfun 

"shortcut for normal mode to run on entire buffer then return to current line" 
au Filetype perl nmap <F2> :call DoTidy()<CR> 

"shortcut for visual mode to run on the the current visual selection" 
au Filetype perl vmap <F2> :Tidy<CR> 

("는 SO 구문 강조 목적 (필요하지 않습니다에 대한 의견을 추가 폐쇄,하지만 유효 정력 구문을 X 원래 커서 위치에 대하여 제거 perltidy 추가 바이트 /의 수)

DoTidy() 대부분 X 바이트에서 원위치 플러스 마이너스로 커서를 반환한다. 그러나 물건을 깔끔하게 유지하는 한 이것은 매우 사소합니다.

[빔 버전 : 7.2]

편집 :는이 문제와 관련이없는거야하지만 가독성과 빔 7.0

+0

감사합니다. 그 커서 문제는 나를 미치게 만들었고 나는 그것을 파악하기에는 너무 게을 렀다. 이것이 최고의 대답입니다. –

+0

커서 저장 코드가 왜 작동하지 않는지 모르겠습니다. 나는'C = COL하자'(".") = 1 라인을하자'와와 (라인 ("."))'순위 = line2byte하자 '대체 (​​".")'다음'호출 커서 (L, C)' 그게 효과가있다. 어쩌면 vim이 너무 오래 되었을까요? 나는 버전 어쨌든 더 의미가 생각 @mikew : 동의 :) 그리고 그것은 호환성 문제이기 때문에 내가 나서서 대답을 업데이트 – mikew

+0

를 사용하여. – hobbs

관련 문제