6

snakemake は、コンパイルよりもワークフローに重点を置いた、make の python に似た代替品です。これは非常に優れていますが、非常に新しく、Emacs でそのモードを見つけることができないようです。私は非常に単純なものが欲しいだけです: 基本モードからの非常にわずかな変更です.

(define-derived-mode snake-mode fundamental-mode
   ...
)

make と同様に、snakemake はインデントについて厳密です (実際のタブ "\t" 文字であり、TAB を入力したときのデフォルトの emacs の動作ではありません)。代わりに「Cq TAB」と入力すると、実際のタブ文字がバッファに配置されます。これは機能します。基本モードの Snakefile で試してみたところ、完全に実行されました。したがって、このモードで TAB が必要になるたびに「Cq TAB」と入力するのを避けるために、snake-mode に最初に追加したいのは、TAB キーを「Cq TAB」(またはこのようなもの) に再バインドすることです。だから私はemacsのマニュアルを熟読して試しました:

(define-derived-mode snake-mode fundamental-mode
  (global-set-key (kbd "\t") (kbd "C-q \t"))
  ...
)

しかし、これと他の代替手段は機能していません...おそらくTABキーのような標準キーの再バインドは推奨される方法ではありませんか?

私が望むスネークモードへのもう1つの追加は、pythonに従って構文を強調表示することです(ただし、pythonの動作、たとえば、pythonのインデント動作はありません)

結論として、「スネークモード」を作成する際の基本モードへのこれら2つの簡単な変更と、ファイル名が「スネークファイル」の場合にスネークモードを呼び出す方法だけが私が探していたすべてでしたが、すでにいくつかの時間を費やしました何時間も emacs のマニュアルを熟読したり、グーグルで検索したりしましたが、私はまだ親しくないようです。これは非常に単純であり、それが可能であると確信しています。何かアドバイス?

ありがとう

マレー

4

4 に答える 4

5

あなたの祈りは聞き届けられました:

https://github.com/kyleam/snakemake-mode

私はそれにとても満足しています。

melpaとして取得できますsnakemake-mode

于 2016-03-31T10:58:46.127 に答える
1

define-derived-modeマクロは、定義したモードにちなんで名付けられたキーマップを自動的に提供します。これを と一緒に使用して、次のようにタブを挿入するだけdefine-keyでキーを作成できます。TAB

(define-derived-mode snake-mode fundamental-mode "Snake"
  "A mode for Python's snakemake."
  (define-key snake-mode-map "\t" 'self-insert-command))

または、モードのインデント メカニズムを設定して、適切なときに行の先頭に (単一の) TAB を挿入することで行をインテリジェントにインデントするようにすることもできます。そうすれば、 を再バインドする必要はありませんがTAB、もちろん、単にキーを再バインドするよりも、インテリジェントなインデントを正しく実装する方がはるかに困難です。詳細については、lunaryorn の回答を参照してください。

于 2013-06-17T07:34:41.570 に答える