내 rc 파일에 커스텀“set”명령을 만들어 모델에서 호출 할 수 있습니까?


10

나는 최근 에 vim 모델에서 매개 변수 이외의 것을 전달할 수 없다는 것을 알게 된 질문 을했습니다 :set. 보안 관련 문제를 이해하고 있지만 다른 해결 방법이 없는지 궁금합니다. SO에 최근 질문 코딩 표준을 준수하는 매개 변수의 큰 배치를 설정하는 방법에 대한 사고-것에 저를 얻었다는 modeline 줄에서 켜거나 끌 수 있습니다 내 rc 파일에있는 것들의 "그룹"을 정의하는 것이 가능?

의사 코드를 실례하지만 설정된 매개 변수에서 트리거되는 함수를 만드는 방법이 있습니까?

set_function! codestyle()
    if &1 == 'psr-2'
        set ts=4
        set sw=4
    endfi
    if &1 == 'drupal7'
        set ts=2
        set sw=2
        iab D8 Drupal 8
    endif
endset_function

그런 다음과 같은 모델에 의해 트리거 될 수 있습니다.

# vim: codestyle=psr-2

이것은 어떤면에서는 파일 형식 일치와 유사하지만 수동 재정의를 허용합니다. 또한 vim에서 파일이 다른 임의의 명령을 실행하는 데 따른 보안 문제를 피하면서보다 사용자 정의 된 환경을 허용하는 다른 사전 정의 된 방식으로 환경을 설정합니다. 이것을 할 수있는 방법이 있습니까?


이를 위해서는 자신 만의 옵션을 정의해야합니다 set. AFAIK, 이것은 Vim에서 가능하지 않습니다 ...
Martin Tournoij

@Carpetsmoker이 질문에 대한 답은 vimscript가 내장 함수를 래퍼하거나 확장 할 수 없다는 것입니까?
Caleb

답변:


10

몇 가지 선택이 있습니다.

  1. 첫 번째 : 플러그인 같은 자신 만의 종류의 모델 디코더를 작성할 수 있습니다. 이것은 내가 당신의 다른 질문에 준 것과 매우 비슷한 대답입니다.

    실제로, 새로운 vim 옵션을 추가 할 수는 없지만 (로 설정할 수 있음 :set) 새 변수를 추가 할 수 있습니다. 그리고 vim 옵션을 설정하는 것 이상의 표준 모델을 사용할 수 없습니다.

  2. 두 번째 가능성 : 콜백 기능을 통해 let-modeline 을 활용하여 하나의 함수를 호출 할 수 있습니다 . 당신은 할 수 귀하의 기능 이나 플러그인, 다음 파일이 포함되어 있습니다 (자동로드?) :CodeStyle().vimrc

    # VIM: let b:codestyle='psr-2' b:ModeLine_CallBack='CodeStyle'
    

    그러나 필요한 것이 정확하고 local_vimrc 와 같은 플러그인을 정말로 원하지 않는다면 자신의 모델과 같은 디코더를 작성하십시오.

  3. 이 경우 세 번째이고 IMO가 더 나은 선택은 다음과 같은 모델에서 새 파일 유형을 정의 'ft'하고이 파일 유형으로 설정 하는 것 # vim: set ft=php.psr2입니다. 와 php글로벌 일반적인 파일 형식 (나는 이것에 대해 확실하지 않다)되고, 및 psr2코딩 스타일에 해당하는 것입니다 전문 파일 형식 인. ftplugin / psr2.vim 및 ftplugin / drupal7.vim이라는 두 개의 ftplugin을 정의해야합니다 (여기서 호출 :setlocal하지는 않음 :set).


6
옵션 3으로 찬성했습니다. 이것이 가장 의미 적으로 적합하고 Vim에 적합한 접근법이라고 생각합니다.
tommcdo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.