この記事では、Python言語、より具体的にはDjangoプロジェクトを編集するためのEmacsエディター機能の日常的な使用における最大限の利便性を実証しようとします。
ことわざにあるように、「彼らは約束の3年を待っている」。 3年が経過していませんが、以前の記事「初心者のためのEmacs:はじめに」からすでに多くのことがわかりました 。 「ツリーに頭を広げる」ことはしませんが、Pythonに適用したときにさまざまなEmacs機能がどのように機能するかをできる限り簡潔に示すようにします。
記事の形式:
- 機能の説明
- あなたの設定でそれを有効にする方法の例
- 作品の付随するビデオデモ。 警告:すべてのビデオの音質はまあまあです。 正しいが、後で...
レシピ全体を適用することに興味がある人のために- 私の設定はここ (Mercurial)にあり 、 ここではそのアプリケーションのレシピがあります 。
内容
- 1.統合ドキュメント
- 1.1。 ロープpydoc
- 1.2。 Pylookup-Python標準ライブラリドキュメントインデックス
- 1.2.1。 Djangoドキュメントのインデックス作成
- 2. Pythonデバッガー:pdb
- 3. Rgrep
- 4.発生
- 5. Emacsのブロック
- 6. Yasnippet-スニペットを使用した入力自動化
- 7. Pythonコードによるナビゲーション
- 7.2。 IM-pythonを介した現在のファイルの関数およびクラス別
- 7.3。 Speedbarを介した現在のファイルの関数およびクラス別
- 7.4。 変数の定義の場所に移動する[クラス、メソッド]
- 7.5。 しおり
- 7.6。 名前パターンによるファイル検索
- 7.7。 プロジェクトファイルを開く:rope-file-find
- 8.1。 Python Ident左/右
- 8.2。 空白のテキストとの戦い
- 8.3。 余分な線の長さの可視化
- 8.4。 自動補完
- 8.4.1。 オートコンプリートロープ
- 8.4.2。 オートコンプリートヒッピーエキスパンド
- 8.5。 テキスト内のコメント
- 9.コード品質テスト
- 9.1。 Flymakeとの統合:pyflymake
- 9.2。 pep8呼び出し
- 9.3。 パイリントコール
- 10. Djangoの詳細
- 11. Pythonのコンパイルモードとクイックスタート
- 12.最後に
1.統合ドキュメント
とても便利な機能。 ドキュメントの詳細を忘れた場合は、ドキュメントを表示するためのオプションのいずれかを呼び出すことができます。
- pylookup-Python標準ライブラリのインデックス付きSphinxオプション
- pydoc-オブジェクトからのインラインドキュメント(ropemacs経由)
これらの機能は互いに独立しているため、個別に示します。
1.1。 ロープpydoc
インクルードのレシピ:ロープのインクルードのレシピによれば、会話は別であり、以下で説明されています。
ロープをオンにすると、キーバインドとメニューが機能し始めます。
- メニューでは、この機能は[ロープ]-> [表示されているドキュメント]から利用できます。
- キーバインド: Cc d
1.2。 Pylookup-Python標準ライブラリドキュメントインデックス
パッケージはここから配置されます: https : //github.com/tsgates/pylookup 2つのアクティブなコンポーネントがあります。2つめの読み取り可能なemacsにpylookup.elを配置し、Lispをロードします。
このように索引付けされます:
./pylookup.py -d /var/db/pylookup/pylookup.db -u /usr/share/doc/python-docs-2.*/html
emacsでは、モジュールのロードと呼び出しの便利なキーを設定します。 設定しました
Ctrl + Shift + Menuキーを使用します。
次のように含まれています( cfg_pylookup.elも参照):
(eval-when-compile (require 'pylookup)) (setq pylookup-program "/usr/local/bin/pylookup.py") (setq pylookup-db-file "/var/db/pylookup/pylookup.db") (global-set-key [(control shift menu)] 'pylookup-lookup)
1.2.1。 Djangoドキュメントのインデックス作成についても:
django-docsをインストールします。
cd ~/ svn co http://code.djangoproject.com/svn/django/trunk/docs/ django-docs cd django-docs make html cd _build/html ln -s genindex.html genindex-all.html
そして、上記のコマンドを補足します。
./pylookup.py -d /var/db/pylookup/pylookup.db -u /usr/share/doc/python-docs-2.*/html -u ~/django-docs/_build/html/
2. Pythonデバッガー:pdb
キーn、sなどを使用してデバッグ中にプログラムコードの動きを「監視」する素晴らしいpdbtrackモジュールがあります。 ところで、pdbを巧みに使用することで、同様の視覚的なデバッグツールよりも多くのことを実現できます。
メインのpythonモードを有効にすると、pdbtrackが自動的にオンになります。
emacsで呼び出すには、次のような行を追加する必要があります。
import pdb; コード内のpdb.set_trace()。 実行可能プログラムはemacs / shellで実行する必要があります。
3. Rgrep
rgrep-特定の拡張子を持つすべてのファイルでの高速行検索。 emacs 23.xのバージョン以降、開発者は呼び出しインターフェイスで何かを変更し、[* .html * .py]などのスペースで拡張機能を分離することは不可能になったことに注意する価値があります。
rgrepにスペースを入力するには-Cqキーでエスケープします
rgrepは驚くほど高速に動作し、数万のファイルがある最大のプロジェクトでさえ、一瞬で探しているものを見つけます。これは頻繁に実行される検索にとって重要です。
キーにバインドされたrgrepがあります: C-f7
4.発生
発生は、現在のファイルでこの行の発生を示します。 呼び出しを簡単にするために、現在の単語を自動的に選択してからoccorを呼び出すマクロを作成しました。 キーにこの関数をアタッチしています: Cz o
5. Emacsのブロック
ブロックは次のとおりです。
- 普通の
- 四角
また、ブロックはそれぞれ異なるレジスタに保存でき、異なるブロックを同時に操作できます。
5.1。 複数のブロック
はい あまり頻繁には使用されませんが、適用すると、クリッパー/パーセライトを上下に移動するのに費やす時間を大幅に節約できます(クリップボードが1つある場合)。
キー:
- Cx rs char-ブロックを名前付きバッファシンボルに記憶します。たとえば、Cx rs1-ブロックを名前1で記憶します。
- Cx ri char-名前付きブロックから貼り付け
5.1。 スクエアブロック
5.1.1。 視覚的な正方形ブロック
ビジュアルモードは、C-enterボタンでアクティブにします。 テキストを入力、削除、削除できる長方形の領域が表示されます
または長方形全体をコピーします。 このモードでは、ブロックを操作するためのすべての標準ボタンが機能します-覚えておくべきAlt + Y
ブロックし、Ctrl + Yで貼り付けます。
5.1.2。 非視覚的な正方形ブロック
正方形のブロックの2番目のバージョンがありますが、多少は削除されていますが、ターミナルモードで動作します。 次のように機能します。
通常どおりブロックを選択し(Cスペース)、同時にキーでブロックを操作します。
- Cx rr char-名前付きレジスタの長方形ブロックを覚えておいてください
- Cx ri char-レジスタから貼り付け
5.2。 キルリングを見る
名前付きブロックの便利な代替品は、killringと呼ばれるemacsに組み込まれたklipperアナログです:
(require 'browse-kill-ring) (global-set-key (kbd "Cc k") 'browse-kill-ring)
5.3。 ブロックとコピーキーで混乱する状況
ブロックと操作へのキーバインディングの状況は、いくつかの客観的で歴史的なものと混同されていることに注意してください
理由:
- Cc Cvブロックを操作するためにすべてのWindowsになじみのあるボタンがデフォルトで機能しない
- xorgには、プライマリとセカンダリの2つのクリップボードがあります
- クリッパー、パーセライトも分泌物の管理に従事し、多くの場合、シーケンスを変更し、すべてに混乱を追加します
- Emacsは、現在のバージョン0.24でxorgのプライマリ/セカンダリ選択を操作する手順を変更しました
その結果、ブロックでコピーするような些細なことでさえ、学習で学ぶのが難しい段階になります
emacs。
xorgでも火に水を追加しますブロックをコピーする真の方法:挿入を制御してコピーし、挿入をシフトします
ブロックを立てます。 この場合、マウスは1つのクリップボードにコピーされ、キーボードの選択は別のクリップボードに入ります。
初心者の場合、Cc CvをCc Cvから解放するために設計されたいわゆるcuaモードを有効にしようとしないで、すぐに「真の方法」を学ぶことをお勧めします。
標準emacsキーbindinds、エンドユーザーから便利な機能の大部分を奪います。 emacsを勉強したら、学ぶ
2つの追加キー:
- Alt-wでブロックを記憶する
- Cwで貼り付けます
大きな問題ではありません。 誰のために-Cua-modeを大胆にオンにして作業しますが、おそらくあなたはまだ
便利なキーボードショートカットキーが十分にないと感じたら、トピックに戻って標準キーを返します。
6. Yasnippet-スニペットを使用した入力自動化
Yasnippetは、頻繁ではあるが覚えにくいテキストブロックの入力を自動化する便利な方法です。
通常、システムのリポジトリで利用可能な、独立したemacsパッケージとしてインストールされます。
次のように構成可能:
(add-to-list 'load-path "/usr/share/emacs/site-lisp/yasnippet") (autoload 'yas/initialize "yasnippet" "Do necessary initialization.") (autoload 'yas/load-directory "yasnippet" "Load snippet definition from a directory hierarchy." t) (require 'yasnippet) ;; not yasnippet-bundle (yas/initialize) (yas/load-directory "/usr/share/emacs/etc/yasnippet/snippets") (yas/load-directory "~/.emacs.d/yasnippets/") (setq hippie-expand-try-functions-list (cons 'yas/hippie-try-expand hippie-expand-try-functions-list)) (global-set-key [(\t)] 'indent-for-tab-command) (setq yas/trigger-key (kbd "Mn"))
7. Pythonコードによるナビゲーション
7.1。 上下機能
キー:
- Alt + Down-関数(クラス)をdown
- Alt +上 -関数ごと(クラス)上
- Cc a-クラスの先頭まで
- Cc e-クラスの終わりまで
構成:
(defun py-to-start-of-class() (interactive) (py-beginning-of-def-or-class 'class) ) (defun py-to-end-of-class() (interactive) (py-end-of-def-or-class 'class) ) (add-hook 'python-mode-hook '(lambda () (local-set-key [(s menu)] 'rope-code-assist) (local-set-key [(s up)] 'python-move-to-start-of-class) (local-set-key [(s down)] 'python-move-to-end-of-class) (local-set-key [(meta down)] 'py-end-of-def-or-class) (local-set-key [(meta up)] 'py-beginning-of-def-or-class) (local-set-key (kbd "Cc Ca") 'py-to-start-of-class) (local-set-key (kbd "Cc Ce") 'py-to-end-of-class) (local-set-key (kbd "sq") 'py-shift-region-left) (local-set-key (kbd "sw") 'py-shift-region-right) ) )
7.2。 IM-pythonを介した現在のファイルの関数およびクラス別
キー(pyhonだけでなく、一般的にどこでも機能します):
- CC v-現在のファイル内の定義のリストを表示します
定義はこちらをご覧ください: idomenu.el
7.3。 Speedbarを介した現在のファイルの関数およびクラス別
Scroll_Lockキーを構成しました:
(global-set-key [Scroll_Lock] 'speedbar)
7.4。 変数の定義の場所に移動する[クラス、メソッド]
ロープを介して設定し、キーのブックマーク:
- Alt + Enter-定義の場所に移動
- Alt + Shift + Enter-振り返る
セットアップの欠点は、移行履歴がグローバルであり、すべての移行がブックマークにゴミを残すことです。
Lispでこの瞬間を配列で書き換える必要があります。 しかし、これまでのところ動作します。
(defun rope-goto-definition-save-place () """ save current place as 'save-place' bookmark and rope-goto-definition """ (interactive) (bookmark-set "save-place" 1) (rope-goto-definition) ) (defun rope-return () """ save current place as 'save-place' bookmark and rope-goto-definition """ (interactive) (bookmark-jump "save-place") ) (global-set-key [(M return)] 'rope-goto-definition-save-place) (global-set-key [(M shift return)] 'rope-return)
7.5。 しおり
- Cz b-リンクを張る
- Cz Up- (現在のファイル内の)上記のリンクに移動します
- Cz Down- (現在のファイル内の)下のリンクに移動します
- Czスペース -リンクのグローバルリストに移動
(require 'bm) (global-set-key (kbd "Cz b") 'bm-toggle) (global-set-key (kbd "Cz <up>") 'bm-previous) (global-set-key (kbd "Cz Cp") 'bm-previous) ;(global-set-key [(control shift down)] 'bm-next) ;(global-set-key [(control shift n)] 'bm-next) (global-set-key (kbd "Cz <down>") 'bm-next) (global-set-key (kbd "Cz Cn") 'bm-next) (global-set-key (kbd "Cz <SPC>") 'bm-show-all)
7.6。 名前パターンによるファイル検索
Pythonに直接関連するのではなく、便利な機能である任意のモードで動作します。 呼び出し元:
- CSf-名前でファイルを検索
(global-set-key [(control shift f)] 'find-name-dired)
7.7。 プロジェクトファイルを開く:rope-file-find
Djangoで表示するためのテンプレートファイルなど、リンクされたファイルを開くと特に便利です。
- Cx pf -ope-find-file-Ropeパッケージを使用してファイルを見つける
8. Pythonテキストの使用
8.1。 Python Ident左/右
- sq、Cc <、Cc Cl-ブロックを左に移動
- sw、Cc>、Cc Cr-ブロックを右に移動
8.2。 空白のテキストとの戦い
- Cz wd-空白のテキストを取ります
(define-key global-map "C-zws" 'show-trailing-whitespace) (define-key global-map "C-zwh" 'hide-trailing-whitespace) (define-key global-map "C-zwd" 'delete-trailing-whitespace)
8.3。 余分な線の長さの可視化
それは確立されています:
(make-face 'mode-line-80col-face)
8.4。 自動補完
8.4.1。 オートコンプリートロープ
Ropeがインストールされると動作を開始します。
8.4.2。 オートコンプリートヒッピーエキスパンド
<span style = "color:#66cc66;">(</ span> global-set-key <span style = "color:#ff0000;"> "M-" </ span> 'hippie-expand <span style = "color:#66cc66;">)</ span>
8.5。 テキスト内のコメント
- CSz、C - # -強調表示されたコードブロックをコメント化またはコメント解除する
(global-set-key [(control \#)] 'comment-or-uncomment-region) (global-set-key [(control shift z)] 'comment-or-uncomment-region)
; hippie expand (global-set-key "\M- " 'hippie-expand)
9.コード品質テスト
9.1。 Flymakeとの統合:pyflymake
flymakeとの統合をサポートするには、pyflakes、pylintパッケージをインストールし、その場所を設定する必要があります
ファイルのコピー:
pyflymake.py
また、このLispコードもインストールします。
cfg_flymake.el
残念ながら、多くの処理を行った後でも、このソリューションは理想的ではありません。 flymakeが_flymakeファイルを所定の場所に書き込まないことがあります
ネットワークサービスは、時々不正確に実行されます。 しかし、実際には、98%のケースで、次のことが可能になるため非常に便利です。
以前の間違いを検出します。
9.2。 pep8呼び出し
モジュールがシステムにインストールされます:pep8。
; pep8 (require 'python-pep8) (global-set-key (kbd "Cc p 8") 'pep8)
9.3。 パイリントコール
同様に。 まず、pylintシステムパッケージをインストールし、次に:
; pylint (require 'python-pylint) (global-set-key (kbd "Cc p l") 'pylint)
10. Djangoの詳細
1)django-shellからプロジェクトを開始する必要があります-そのため、pdbを使用できます。
2)いくつかの異なるdjangoテンプレートの構文表示モジュールがあります。
11. Pythonのコンパイルモードとクイックスタート
Pythonプログラムのどこでも、スタンドアロンスクリプトである場合は、 Cc Ccキーを使用して実行できます。
この場合にエラーが生成されると、カーソルがエラーの代わりになります。
オプション番号2:コンパイルオプションからプログラムを実行します。 私の構成では、次のように構成されています:
(global-set-key [C-f9] 'compile)
コンパイル機能を使用する場合、F8 / Shift-F8エラージャンプを使用できます。
どちらの場合も、pdb呼び出しは機能せず、プログラムは端末に接続せずに起動されます。
12.最後に
この記事に含まれていないもの
Pythonファイルの編集に最も関連する機能を説明しようとしました。 多くはこのレビューに含まれていませんでしたが、Pythonプロジェクトの操作に直接関連していますが、たとえばバージョン管理システムの操作などの機能です。これは別の記事に値します。
記事はまだ完成していません。コメントが届くと、間違いなく変更と追加を行います。
読者のコメントに期待すること :
- 私が忘れていた(または知らなかった)ことを教えてください、私は追加します。
- vim、Sublimeなどについて同様のレビューをするのが面倒ではないのは誰ですか? まず、ここで説明する機能は興味深いものであり、Emacsには存在しないが他の場所に存在する[有用な]機能です。
PS音質は私たちを失望させました、私はffmpeg -vf crop = 970:505:7:15 -f alsa -i hw:0 -f x11grab -r 25 -s 1680x1050 -i:0.0 -s 1280x720 -vcodec libx264 -vpre lossless_ultrafastで書きましたfilename.aviおよび
ラップトップのマイクで。 第一に、キーストロークが大声で聞こえ、第二に、音が静かで、時には外来ノイズが聞こえます。 悲しいかな...多分私はを使用してビデオを再撮影します
ヘッドセットですが、これまでのところ-それがあります。 それらなしでより良いでしょう?