“Öz” gibi Python anahtar kelimeleri için “eksik” sözdizimi vurgulamasını nasıl düzeltebilirim?


12

Ben python için sözdizimi vurgulama düzeltmeye çalışıyorum; renklerim farklı vim renk şemalarında neye benzemesi gerektiğinin ekran görüntülerinden farklıdır. Ve .rb (doğru görüntülenen) ile .py'yi karşılaştırma farkını görebilirsiniz, ki bu kapalı gibi görünüyor:

resim açıklamasını buraya girin

Örneğin, nasıl selfvurgulanmadığına dikkat edin. (Bu base16'dadır, ancak karşılaştırma diğer renk şemalarında benzer olacaktır). Genellikle, nesne sözdizimi vurgulamasının yanlış olduğu görülmektedir.

Denediğim bazı şeyler:

  1. Sözdizimi komut dosyalarına vim yüklerine bakarken; aşağıdaki örnekte .py ve .rb arasındaki tek fark, elbette, ruby'nin indent / ruby.vim ve sözdizimi / ruby.vim olurken, python / python.vim ve sözdizimi / python.vim alır. Bunlar homebrew vim ile gelen dosyalar.
  2. Aynı dosyaların terminal (iterm2) vim yerine macvim'e yüklenmesi; aynı sorun, dosyalar resimdeki gibi görünüyor.
  3. Yeni python.vim dosyasını ekleme . .vim/afterKomut dosyası olarak kullanılsa bile sorunu çözmez .

Herhangi bir öneri bekliyoruz; Başımdan beri saatlerce başıma vuruyorum ve vurgulamanın neden beklendiği gibi çalışmadığını anlayamıyorum.


Python'un sembolleri olmadığını ve yeni kod için Python 3 sözdizimini kullanmanızı şiddetle tavsiye ederim.
Martin Tournoij

Yanıtlar:


12

Sözdizimi vurgulama kısaca nasıl çalışır:

  • Gelen syntax/<filetype>.vimsözdizimi kuralları ile tanımlanır :syntaxkomuta. Bu komut sözdizimini tanımlar. "Metin bu normal ifadeyle eşleşiyorsa, bir dizedir" der ve böyle devam eder. Bunu yapmak için bir vurgu grubu atar . O mu değil gibi renkler hakkında bir şey söylemek.

  • :highlight"bu grubu bu renklerle vurgula" diyor. Bu, sözdizimi dosyasında değil renk şemasında yapılır . Varsayılan Vurgu gruplarının bir grup vardır ( String, Function, Specialve benzeri) tüm renk şemaları tanımlamak gerekir ki.

    Yine de bu varsayılan gruplarla sınırlı değilsiniz ve istediğiniz kadar grup oluşturabilirsiniz (ancak varsayılan sözdizimi dosyaları genellikle yoktur).

  • indent/<filetype>.vimDosya otomatik girinti kontrol eder. Örneğin Ruby için "sonraki satır defgirinti seviyesini artırmalı" ve "sonraki satır endgirintiyi bir düzey azaltmalıdır" diyor. Renkler veya sözdizimi vurgulama ile hiçbir şey yapmaz.


Farklı programlama dilleri neden farklı vurgulanır? Kısmen kişisel estetik ve onu yazan kişinin görüşleri nedeniyle. Örneğin Ruby'de Typevurgulama grubu sınıf adları için kullanılır. Ama aynı zamanda Functionbaşka bir şey de olabilirdi . Neden öyle Type? Muhtemelen yazar, renk şemasında daha iyi göründüğünü düşündüğü için.

Ancak daha da önemlisi, diller farklı anlambilim ve duyarlılıklara sahiptir. Ruby'de selfözel bir anahtar kelimedir. Yapamazsın self = "foo"ya def self(). Bunlar hatalar. Ancak Python'da durum böyle değil . Herhangi bir özel özelliği olmayan başka bir değişken. Yapma:

x = Object()
x.foo()

gerçekten Python tarafından:

Object.foo(x)

Adı selfsadece kongre (neredeyse evrensel olarak benimsenmiştir) ama istediğiniz her şeyi adlandırabilirsiniz; def x(this):veya def x(xxx):eşit derecede geçerlidir. Adı selfistediğiniz yerde de kullanabilirsiniz ; self = 'foo've def self():gayet iyi.

Ne selfözel bir anahtar kelime ne de önceden tanımlanmış bir değişken (gibi str) vurgulanması gerektiğini iddia ediyorum . selfSözdizimi dosyasında kelimenin izi yok , bu yüzden yazarın aynı mantıkta olduğu anlaşılıyor :-)


İsterseniz selfvurgulanan bunun için bir sözdizimi kuralı oluşturmak gerekir:

:syn keyword pythonBuiltin self

pythonBuiltinGrup adı zaten varsayılan sözdizimi dosyasında tanımlanmış ve bağlantılıdır Functionvurgulamak grubunda. Yeni bir vurgu grubu kullanmak için aşağıdakileri kullanın:

:syn keyword pythonSelf self
:highlight def link pythonSelf Special

Bu değişiklikleri yapmak için onları vimrc dosyanıza yapıştıramazsınız. Sözdizimi dosyası onu geçersiz kılar. Bunun yerine , sözdizimi dosyası yüklendikten sonra çalıştırmanız gerekir; bunu iki şekilde yapabilirsiniz:

  1. Bir FileTypeautocmd kullanın :

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

    syn keyword pythonSelf self
    highlight def link pythonSelf Special
    

Her iki yöntem de etkili bir şekilde aynıdır. Hangisini tercih ederseniz kullanın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.