"self"와 같은 Python 키워드에 대한 "missing"구문 강조 표시를 어떻게 수정합니까?


12

파이썬의 구문 강조를 수정하려고합니다. 내 색은 다른 vim 색 구성표에서 "모양"이 어떻게 보이는지 스크린 샷의 색과 다릅니다. 그리고 .rb (정확하게 표시됨)를 .py와 비교했을 때의 차이점을 알 수 있습니다.

여기에 이미지 설명을 입력하십시오

예를 들어 self강조 표시되지 않은 방법 에 주목하십시오. (이것은 base16에 있지만 비교는 다른 색 구성표에서 비슷합니다). 일반적으로 객체 구문 강조 표시가 잘못된 것 같습니다.

내가 시도한 것들 :

  1. 구문 스크립트를 살펴보면 vim이로드합니다. 아래 예제에서 .py와 .rb의 유일한 차이점은 물론 ruby는 indent / ruby.vim과 syntax / ruby.vim을 얻는 반면 python은 indent / python.vim과 syntax / python.vim을 얻는다는 것입니다. 이들은 homebrew vim과 함께 제공되는 파일입니다.
  2. 터미널 (iterm2) vim이 아닌 macvim에 동일한 파일로드 같은 문제, 파일은 그림과 정확히 동일하게 보입니다.
  3. 새로운 python.vim 파일 추가 .vim/after스크립트 로 사용하더라도 문제가 해결되지 않습니다 .

어떤 제안이라도 환영합니다. 나는 이것에 몇 시간 동안 머리를 두드리고 강조 표시가 예상대로 작동하지 않는 이유를 알 수 없습니다.


Python에는 기호가 없으므로 새 코드에 Python 3 구문을 사용하는 것이 좋습니다.
Martin Tournoij

답변:


12

구문 강조가 간단하게 작동하는 방법 :

  • 에서 syntax/<filetype>.vim구문 규칙은 정의됩니다 :syntax명령. 이 명령은 구문을 정의합니다. "텍스트가이 정규식과 일치하면 문자열입니다"등이 표시됩니다. 이를 위해 강조 그룹을 할당합니다 . 색상에 대해서는 아무 말도 하지 않습니다 .

  • :highlight"이 색상으로이 그룹을 강조 표시합니다."라고 말합니다. 이것은 구문 파일이 아닌 색 구성표 로 수행 됩니다. 기본 하이라이트 그룹의 무리가있다 ( String, Function, Special, 등) 모든 색 구성표를 정의해야한다.

    그러나 이러한 기본 그룹으로 제한되지 않으며 원하는 수의 그룹을 만들 수 있지만 기본 구문 파일은 그렇지 않습니다.

  • indent/<filetype>.vim파일은 자동 들여 쓰기를 제어합니다. 예를 들어 Ruby의 경우 "다음 줄 def은 들여 쓰기 수준을 높여야합니다"와 "다음 줄 end은 들여 쓰기를 한 수준 낮추어야합니다"라고되어 있습니다. 색상이나 구문 강조 기능을 사용하지 않습니다.


다른 프로그래밍 언어가 다르게 강조되는 이유는 무엇입니까? 개인의 미학과 그것을 쓴 사람의 의견 때문입니다. 예를 들어 Ruby에서는 Type강조 그룹이 클래스 이름으로 사용됩니다. 그러나 그것은 또한 Function다른 것일 수 있습니다 . 왜 그렇 Type습니까? 아마도 저자가 자신의 색 구성표가 더 좋아 보인다고 생각했기 때문일 것입니다.

그러나 더 중요한 것은 언어의 의미와 민감성이 다릅니다. 루비에서는 self특별한 키워드입니다. 당신은 할 수없는 self = "foo"def self(). 이들은 오류입니다. 그러나 이것은 파이썬의 경우 가 아닙니다 . 특별한 속성이없는 또 다른 변수 일뿐입니다. 하기:

x = Object()
x.foo()

파이썬에 의해 실제로 "번역"됩니다 :

Object.foo(x)

이름 self은 관습에 불과하지만 (거의 보편적으로 채택 됨) 원하는 이름을 지정할 수 있습니다. def x(this):또는 def x(xxx):똑같이 유효합니다. 원하는 self곳 어디에서나 이름을 사용할 수 있습니다 . self = 'foo'그리고 def self():완벽하게 정상적으로입니다.

나는 self특별한 키워드도 아니고 사전 정의 된 변수 (예 :) 가 아니므로 강조 표시해서는 안된다고 주장합니다 str. self구문 파일에 단어의 흔적이 없으므로 작성자가 동일한 추론을 한 것처럼 보입니다.


당신이 원하는 경우에 self강조 당신은 그것을위한 구문 규칙을 만들어야합니다 :

:syn keyword pythonBuiltin self

pythonBuiltin그룹 이름이 이미 기본 구문 파일에 정의와 연결되어 Function하이라이트 그룹. 새로운 하이라이트 그룹을 사용하려면 다음과 같이 사용하십시오.

:syn keyword pythonSelf self
:highlight def link pythonSelf Special

이러한 변경을 위해 vimrc 파일에 'em'을 넣을 수는 없습니다. 구문 파일이이를 무시합니다. 대신 구문 파일이로드 된 다음 두 가지 방법으로 실행할 수 있습니다.

  1. FileTypeautocmd를 사용하십시오 .

    augroup python
        autocmd!
        autocmd FileType python
                    \   syn keyword pythonSelf self
                    \ | highlight def link pythonSelf Special
    augroup end
    
  2. 를 사용 after-directory, ~/.vim/after/syntax/python.vim:

    syn keyword pythonSelf self
    highlight def link pythonSelf Special
    

두 방법은 사실상 동일합니다. 원하는 것을 사용하십시오.

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