PuppetLabs용 사용자 정의 Emacs Ruby 모드 구성

PuppetLabs용 사용자 정의 Emacs Ruby 모드 구성

저는 주로 emacs를 사용하여 편집합니다.퍼펫 구성 파일. Ruby 모드를 로드하고 Puppet 구성 파일( *.pp)과 함께 사용하기 위해 .emacs에서 다음 설정을 사용하고 있습니다.

(autoload 'ruby-mode "ruby-mode" "Major mode for editing ruby scripts." t)
(setq auto-mode-alist  (cons '(".rb$" . ruby-mode) auto-mode-alist))
(setq auto-mode-alist  (cons '(".pp$" . ruby-mode) auto-mode-alist))

내 꼭두각시 파일에 "ensure" 지시문을 들여쓰기한 것을 제외하고는 모두 괜찮습니다. ensure이는 Ruby의 예약어이기 때문에 들여쓰기가 더 눈에 띕니다.

cron { logrotate:
  command => "/usr/sbin/logrotate",
  user => root,
  hour => 2,
ensure => present
  minute => 0,
}

ensureEmacs에게 Puppet 파일을 특별히 처리 하지 않도록 지시하는 방법은 무엇입니까 ?

답변1

내 생각에 이 문제를 처리하는 가장 쉬운 방법은 ruby-mode.el을 puppet-mode.el에 복사하고 ensure특별히 처리되는 모든 곳을 삭제하는 것입니다. 내 경우에는 ruby-mode.el다음 두 곳에서만 이런 일이 발생하는 것 같습니다.

  1. 블록 단어 정의 위치

    (defconst ruby-block-mid-keywords
      '("then" "else" "elsif" "when" "rescue" "ensure")
      "Keywords where the indentation gets shallower in middle of block statements.")
    
  2. 예약어는 다음과 같이 정의됩니다.

    (defconst ruby-font-lock-keywords
    ...
                 "ensure"
    

ensure두 곳 모두에서 삭제하고 다른 이름으로 저장 한 puppet-mode.el다음 이를 변경하면 .emacs문제가 해결될 것입니다.

(autoload 'puppet-mode "puppet-mode" "Major mode for editing Puppet config" t)
(setq auto-mode-alist  (cons '(".pp$" . puppet-mode) auto-mode-alist))

관련 정보