はじめに
6か月前にVimからEmacsに切り替えることにしたとき、まずHabrでのEmacsのセットアップに関する記事を探すことにしました。 驚いたことに、このエディターをPythonで動作するように構成する方法を説明した記事は1つしかありませんでした。 私はvimで2年の経験があり、この記事ではカバーされていない特定の要件がありました。 一般に、インターネット上のPythonでEmacsを操作することに関するロシア語の記事はほとんどありません。 Emacs自体をカスタマイズすることの微妙さについては説明しませんが、これについては別の記事でも十分ではありません。
すぐに、ホリバーEmacs対Vim、およびEmacs / Vim対IDEのファンに警告したいと思います。これらのトピックに関する無駄な議論を生み出したくありません。 長い検索の後、私に合ったエディターを見つけました。好きなようにカスタマイズできます。 私は自分の設定を共有したいだけでなく、このツールを自分用にカスタマイズし続けるために、コメントで代替ソリューションを確認したいと考えています。
必要条件
最初の要件は、持ち運びが簡単な構成と自宅と職場の間のプラグインのインストールです。
これにはgithubを使用します。 configで何かを変更することがよくあるので、meldを使用してファイル間の違いを表示します。
meldでは、ディレクトリと個々のファイルの両方を表示できます。 同じメロディーと同期した後、すべての変更をホームディレクトリに追加します。
同様に重要な要件は、vimのNeoBundleのように、ロードと更新が遅延する便利なプラグインマネージャーです。 このようなマネージャーを検索する過程で、プラグインをemaxでコンパイルしてロードを高速化できることも明らかになりました。 幸いなことに、私はすべての要件を満たし、さらにそれ以上のマネージャーを見つけました。 このel-getは、自動コンパイル、自動初期化、そして最も重要なインストールレシピを備えた完璧なマネージャーです。 わかりやすくするために、レシピの簡単な例を示します。
(:name flycheck :type github :pkgname "flycheck/flycheck" :checkout "0.25.1" :minimum-emacs-version "24.3" :description "On-the-fly syntax checking extension" :build '(("makeinfo" "-o" "doc/flycheck.info" "doc/flycheck.texi")) :info "./doc" :depends (dash pkg-info let-alist seq) :post-init (progn (add-hook 'python-mode-hook #'flycheck-mode) (add-hook 'js-mode-hook #'flycheck-mode) (add-hook 'web-mode-hook #'flycheck-mode) (add-hook 'lisp-interaction-mode-hook #'flycheck-mode) (add-hook 'fish-mode-hook #'flycheck-mode) (add-hook 'markdown-mode-hook #'flycheck-mode) (add-hook 'go-mode-hook #'flycheck-mode) (setq flycheck-check-syntax-automatically '(mode-enabled save idle-change)) (setq flycheck-highlighting-mode 'lines) (setq flycheck-indication-mode 'left-fringe) (setq flycheck-checker-error-threshold 2000) ))
これは、オンザフライで編集中にファイルを解析するためのプラグインであるflycheckをインストールするためのレシピです。 レシピでは、コードのソース-git / githubリポジトリ、またはELPA / MELPAのファイル名またはプラグイン名へのリンク、githubの場合は必要な依存関係-ブランチまたはタグを指定できます。
ビルドコマンドを使用すると、プラグインの正しいインストールに必要なシステムユーティリティを実行できます。
また、すばらしいコマンドがあります:: post-init、プラグインが初期化された後に毎回実行されるlispコードを指定できます。 このコマンドに、このプラグインに関連するすべての設定を記述することにしました。 一般的に-非常に便利なツール。
仕事と自宅の同期のため、すぐに~/.emacs.el
ファイルを拒否しました。
したがって、すべての設定は~/.emacs.d
。 設定フォルダーから論理的に壊れたファイルが接続される最も薄いinit.el。
(add-to-list 'load-path (expand-file-name "settings" user-emacs-directory)) (require 'dark-mint-theme) (require 'scratch_my) (require 'package_my) (require 'hooks_my) (require 'keybindings_my) ... customize
最初のファイルはテーマです。 その他のトピックはこちら
scratch_my.elはすべての標準設定を記述し、新しいEmacsに最初から存在する必要なモードを含んでいます。
package_my.elに、インストールされているすべてのプラグインと、正しいインストールのためのいくつかの機能のリスト。
異なるモードのフックは、 hooks_my.elファイルに記述されています。
キーボードショートカットの変更は、個別のファイルkeybindings_my.elで行われます。
yasnippetスニペットとレシピを含むフォルダーも同期されます。
プラグイン設定を追加してレシピを変更することが非常に多いので、それらを別のフォルダーに保存します。
プログラミング言語に依存しないプラグイン
すべてのプラグインを詳細に説明するのではなく、各リンクが添付され、すべてが詳細に説明されます。
avyから始めましょう。これは、入力された文字( vim-easymotionのアナログ)を含む単語にジャンプできるプラグインです。
自動補完には、 会社モードが使用されます -Emacsのユニバーサル自動補完。
非常に高速に動作し、完全に構成可能ですが、ドキュメントは不完全ですが、多くの場合ソースコードを確認しました。 便利さは、このプラグインの構造に現れています。 バックエンド-さまざまなモードの個別のコードとフロントエンド-Emacs自体でオートコンプリートの結果を描画する共通のコードがあります。 異なるモードでは、異なるバックエンドが使用されます。 たとえば、company-elispバックエンドはlispに使用され、company-jediはPythonに使用されます( jediのバックエンドはPythonの静的コード分析ライブラリです)。
golangコードを補足するために、 company-goバックエンドが使用されます。
expand-regionは、テキストを意味的に強調するために使用されます。 このビデオの詳細。
git- git-gutter 、 mo-git-blame 、およびmagitを操作するための3つの優れたプラグインを使用します。 私は最後のプラグインを強調したい-それは単に驚くべきことであり、数回のタッチとコードはすでにサーバー上にあります( ビデオ )。
しかし、ファイルマネージャについてはどうでしょうか。 ネオツリー 。 gitとの統合が存在します。
非常に便利なプラグイン-helm-すべてのオートコンプリート。 開いているバッファ( helm-swoop )、最近開いたファイル、現在のディレクトリ内のファイルの検索、コマンドの検索、複数のバッファ内の変数名の変更など。 優れた記事では、このプラグインのすべての機能について説明しています。
複数のカーソル -このビデオを見た後、絶対に試してみてください:)。
キーをダブルクリックするアクションを割り当てることができるプラグインは、 キーコード ( ビデオ )と呼ばれます
発射物はEmacsのプロジェクト管理プラグインです。 プロジェクトによる検索、プロジェクトファイルによる置換、プロジェクト内の移動、プロジェクトの切り替え、およびその他の多くの便利な機能。 この記事の詳細。
yasnippet-さまざまなプログラミング言語のスニペットを作成して使用できます。
Pythonモード
最後に、Pythonを操作するためのEmacsの直接設定に進みます。
フックから始めましょう
;; Python mode (defun my-merge-imenu () (interactive) (let ((mode-imenu (imenu-default-create-index-function)) (custom-imenu (imenu--generic-function imenu-generic-expression))) (append mode-imenu custom-imenu))) (defun my-python-hooks() (interactive) (setq tab-width 4 python-indent 4 python-shell-interpreter "ipython" python-shell-interpreter-args "-i") (if (string-match-p "rita" (or (buffer-file-name) "")) (setq indent-tabs-mode t) (setq indent-tabs-mode nil) ) (add-to-list 'imenu-generic-expression '("Sections" "^#### \\[ \\(.*\\) \\]$" 1)) (setq imenu-create-index-function 'my-merge-imenu) ;; pythom mode keybindings (define-key python-mode-map (kbd "M-.") 'jedi:goto-definition) (define-key python-mode-map (kbd "M-,") 'jedi:goto-definition-pop-marker) (define-key python-mode-map (kbd "M-/") 'jedi:show-doc) (define-key python-mode-map (kbd "M-?") 'helm-jedi-related-names) ;; end python mode keybindings (eval-after-load "company" '(progn (unless (member 'company-jedi (car company-backends)) (setq comp-back (car company-backends)) (push 'company-jedi comp-back) (setq company-backends (list comp-back))) ))) (add-hook 'python-mode-hook 'my-python-hooks) ;; End Python mode
プラグインが機能するには、pipを介していくつかのパッケージをインストールする必要があります
pip install -U jedi virtualenv flake8
インデント設定とインタープリターへのパスを設定し、特定のキーボードショートカットを設定し、company-jediバックエンドを追加してimenuを設定します。
オートコンプリートについてはすでに高い(company-jedi)、ファイルおよびファイル構造(クラス名、変数、メソッドなど)による検索はimenu(F10)を介して行われ、F7を押すとNeoTreeファイルマネージャーの開閉が行われます。
使用したプラグインについて少し説明します
auto-virtualenv-特に発射体と併用すると、 うまく機能します。
jedi-core -company-jediのオートコンプリートオプションを提供し、定義通りに進み、関数やクラスへのドックを表示します。
pip-requirements-名前が示すとおり-要件を処理するためのパッケージ。
py-autopep8 -pep8標準に従ってコードを自動的にフォーマットできます。
py-isort-ファイル内のすべてのインポートを自動的にソートできます
Python REPL
フックでは、使用するシェルのバージョンを示しました。
(setq python-shell-interpreter "ipython" python-shell-interpreter-args "-i")
Cc Cc
をクリックすると、現在のバッファーのすべての内容がipythonに転送され、そこですぐにテストできます。
コードの一部を表示する場合は、選択してCc Cr
を押します
コマンドMx pdb RET
実行して、Pythonモードのビルトインデバッガーを使用することもできます(RET-emaxではEnter / Returnを意味し、最初は混乱します)。 より機能的なバージョンもあります-realgud
例として、いくつかのスクリーンショットを示したい
golangのEmacs
goプロジェクトで作業する場合、いくつかのプラグインが使用されます。
go-mode-ゴーモード操作モード。
ドキュメントを見たり、定義を調べたり、gofmt、golintなどのさまざまなコードチェックおよびフォーマットユーティリティを使用したりできます。 非常に便利なプラグイン。
flycheck-gometalinter -gometalinterとflycheckの統合。
company- go-会社のバックエンド
その他のプラグイン
markdown-mode-このモードでは、この記事を書いています。 livedownの助けを借りて、ブラウザで結果をすぐに確認します。
Webモード -html、css、Django / Jinja2テンプレートを使用できます。
restclient-さまざまなCookieを操作するためのプラグイン。 Emacsrocksは、彼のビデオでより多くを見せます。
おわりに
ある記事で各プラグインの設定のすべての機能と微妙な点を説明することは不可能ですが、短い説明のリストが読者が私の経験から新しいことを学ぶことを願っています。 Habrahabrは、コメントから非常に有用な情報を頻繁に見つけることができることでも有名です。そのため、設定と経験を共有するようお願いします。
従来、すべてのエラーとコメントをプライベートメッセージで私に送信してください。
便利なリンク