vim에서는 modeline이 작동하지 않습니다


19

.aliasesbash 및 zsh 라는 파일 이 있습니다.이 줄을 넣습니다.

# vim: set filetype=bash: 

하지만 내가 만들면

: echo &ft

나는 얻다 conf


나는 여기서 모든 것을 시도했지만 아무것도 효과가 없었다. 저는 18 년 동안 vim을 사용해 왔습니다. 내가 modeline을 작동시키지 못한 것은 이번이 처음입니다.
브루노 Bronosky

알아 냈습니다. 아래 답변하십시오. superuser.com/a/1174296/3376
Bruno Bronosky

답변:


28

작동합니다. 나는 그 선을 직접 시도했고 효과가 있었다. 귀하의 'modeline'옵션이 'nomodeline'으로 설정되었을 수 있습니다. 이것을 실행하고 당신이 얻는 것을보십시오.

:verbose set modeline?

'modeline'옵션의 값과 기본값이 아닌 경우 마지막으로 설정된 위치를 알려줍니다.

'modeline'의 보안 문제가 오랫동안 해결되었지만 일부 Linux 배포판에서는 / etc / vimrc 또는 / usr / share / vim / vimrc의 'nomodeline'을 보안 수단으로 설정했습니다.


~ / .vimrc에서 마지막 세트
juanpablo

보안을 위해 모델을 변경하여 ~ / .vimrc au BufNewFile, BufRead에 추가합니다. * aliases set filetype = sh
juanpablo

그들 모두가 오랫동안 고쳐진 것은 아닙니다. github.com/numirias/security/blob/master/doc/…
duckbrain

@duckbrain 데이터 자체에서 데이터를 살펴 보는 코드에 의해 실행되는 내장 된 명령어를 포함 할 수있는 한 모든 보안 문제가 수정되었음을 보장하는 것은 근본적으로 불가능합니다. 키스 보 스틱의 설명서 이유입니다 NVI는 항상 말했다있다 modelines옵션이 구현되지 않은 것을하고있을 것입니다 결코. 이것은 PDF, Word, Excel 및 & c & c & c에서 실행되는 파일 포함 명령 또는 매크로 명령어에서 발생하는 모든 보안 버그와 같습니다.
tchrist

14

이 다른 답변에서 전체 디버그 검사 목록을 설명합니다 .

문서완전히 사실 이 아니기 때문에 나는 이것에 정말로 빠져 들었다 .

버전 8 (및 이전 버전)에서는 모델에서 단어 set를 사용할 수 없습니다 . 설명서에는 "두 번째 양식"이있는 것으로 설명되어 /* vim: set ai tw=75: */있지만 작동하지 않습니다. "첫번째 형태"를 사용해야합니다// vim: ai tw=75

참고 : 이러한 종류의 주석 표시기 중 하나를 사용할 수 있습니다. 아니면 전혀.


모든 vim 설치에 반드시 해당되는 것은 아닙니다. setvim 8.0에서는 7.4 의 형식은 아니지만 양식이 제대로 작동합니다. 또한 두 번째 형식으로 // vim: ai tw=75줄 끝에 다른 문자가있을 수 없으며 vim은 모델을 불평하고 무시합니다.
Josh

이것은 반드시 버그 (또는 오래된 문서)로보고되어야합니다. 나는에 재현 VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Nov 24 2016 16:44:48) Inklusive der Korrekturen: 1-1689 Extra-Patches: 8.0.0056 Verändert von pkg-vim-maintainers@lists.alioth.debian.org Übersetzt von pkg-vim-maintainers@lists.alioth.debian.org Riesige Version mit GTK2-GNOME GUI. (마지막 선은 의미 에 의해 수정 ... , ...에 의해 컴파일 , 거대한 버전 ... ).
LittleByBlue

메일 링리스트에서 해결하려고했습니다. 그들은 동의하지 않았다.
Bruno Bronosky

@BrunoBronosky 메일 스레드에 대한 링크가 있습니까? 그들의 추론을 읽고 싶습니다.
graywolf

다음은 스레드에 대한 링크입니다. groups.google.com/d/msg/vim_dev/aFh3X0etB7c/zl0Vi-MuFQAJ 나는 그들의 추론을 이해하는데 시간이 걸리지 않았습니다.
Bruno Bronosky

11

set modelines=1 내 ~ / .vimrc의 (또는 0이 아닌 값)가 나를 위해 일했습니다.


5
modeline또한 설정 되어 있지 않으면 효과 가 없습니다 (루트가 아닌 한 Vim에서 기본적으로 설정 됨)
kynan

젠투는 vim에서 modelines을 처리하는 모든 취약점으로 인해 시스템 전체 set nomodeline에 적용 /etc/vimrc됩니다.
MattBianco

제 경우에는 modelines0이 아닌 값 으로 설정 해야했습니다. 도움말에 기본값은이라고 나와 5있으므로 이것이 내가 설정 한 것입니다. 미국이,If 'modeline' is on 'modelines' gives the number of lines that is checked for set commands. If 'modeline' is off or 'modelines' is zero no lines are checked.

9

~ / .vimrc에서 다음을 설정해야합니다.

set nocompatible 
filetype plugin on
set modeline 

이 라인들은 데비안 9에서 작동합니다. 감사합니다!
caligari

7

~/.vimrcFuntoo Linux 박스에서 저에게 다음을 추가 했습니다.

set modeline

Mac에서는 작동하지 않습니다!
shuva

1

이것이 검색에서 나타나는 것처럼 보이기 때문에 :

나는 같은 문제가 있었다.

# vim: set filetype=sh:

작동하지 않아 ft = conf도 발생했습니다. ~ / .bash_alias에 모델이 없으면 ft가 비어 있으므로 무언가가 바뀝니다.

동안

# vim: filetype=sh:

일했다. 마지막 ":"존재는 관련이없는 것 같습니다.

나는 기록을 위해 Vim8 양조 버전으로 OSX를 사용하고 있습니다.

modeline의 도움으로 인해 이상합니다.

[text]{white}{vi:|vim:|ex:}[white]{options}

[text]{white}{vi:|vim:|Vim:|ex:}[white]se[t] {options}:[text]

지원되는 것 같습니다.

의 출력

verbose set ft?

"vim : filetype = sh"는

filetype=sh
      Last set from modeline

모델이없는 경우 :

filetype=

"vim : set filetype = sh"사용

filetype=conf
     Last set from /usr/local/Cellar/vim/8.0.1350/share/vim/vim80/filetype.vim

내 conf에 어딘가에 부작용이있을 수 있지만 호환되지 않는 modeline 구문은 나에게 예상대로 작동하는 유일한 구문입니다.


1

/usr/share/vim/vim80/debian.vim데비안 기반 배포판 에서 from vim-common은 기본적으로 비활성화 되어 있습니다.modeline

" modelines have historically been a source of security/resource
" vulnerabilities -- disable by default, even when 'nocompatible' is set
set nomodeline

또는 파일 modeline에서 명시 적 으로 활성화 해야 합니다..vimrc~/.vim/vimrc

set modeline

0

아마도 모델이 비활성화되어 있기 때문일 수 있습니다.

나는 그 문제를 다음과 같이 해결합니다.

  1. 보안 문제를 피하기 위해 일반적으로 비활성화 상태로 유지하십시오.
  2. securemodelines 플러그인 설치
  3. 내가 사용하는 모델 만 허용합니다.

이 경우 기본 허용 된 명령은 다음과 같습니다 filetype.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.