EmacsとPython(サイクルの記事2)

プログラマーの仕事に関する調査結果によると、時間の約20%がコードの直接記述に費やされ、時間の約80%が古いコードの分析に費やされています。 この前提に基づいて、テキストエディターは最初にコードをナビゲートする便利な手段を提供する必要があります。 説明されている機能のほとんどは、ナビゲーションと分析を扱っています。



この記事では、Python言語、より具体的にはDjangoプロジェクトを編集するためのEmacsエディター機能の日常的な使用における最大限の利便性を実証しようとします。



ことわざにあるように、「彼らは約束の3年を待っている」。 3年が経過していませんが、以前の記事「初心者のためのEmacs:はじめに」からすでに多くのことがわかりました 。 「ツリーに頭を広げる」ことはしませんが、Pythonに適用したときにさまざまなEmacs機能がどのように機能するかをできる限り簡潔に示すようにします。







記事の形式:





レシピ全体を適用することに興味がある人のために- 私の設定はここ (Mercurial)にありここはそのアプリケーションのレシピがあります



内容







1.統合ドキュメント







とても便利な機能。 ドキュメントの詳細を忘れた場合は、ドキュメントを表示するためのオプションのいずれかを呼び出すことができます。







これらの機能は互いに独立しているため、個別に示します。



1.1。 ロープpydoc







インクルードのレシピ:ロープのインクルードのレシピによれば、会話は別であり、以下で説明されています。





ロープをオンにすると、キーバインドとメニューが機能し始めます。









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つある場合)。



キー:







5.1。 スクエアブロック





5.1.1。 視覚的な正方形ブロック


ビジュアルモードは、C-enterボタンでアクティブにします。 テキストを入力、削除、削除できる長方形の領域が表示されます

または長方形全体をコピーします。 このモードでは、ブロックを操作するためのすべての標準ボタンが機能します-覚えておくべきAlt + Y

ブロックし、Ctrl + Yで貼り付けます。



5.1.2。 非視覚的な正方形ブロック




正方形のブロックの2番目のバージョンがありますが、多少は削除されていますが、ターミナルモードで動作します。 次のように機能します。

通常どおりブロックを選択し(Cスペース)、同時にキーでブロックを操作します。







5.2。 キルリングを見る



名前付きブロックの便利な代替品は、killringと呼ばれるemacsに組み込まれたklipperアナログです:



 (require 'browse-kill-ring) (global-set-key (kbd "Cc k") 'browse-kill-ring)
      
      







5.3。 ブロックとコピーキーで混乱する状況





ブロックと操作へのキーバインディングの状況は、いくつかの客観的で歴史的なものと混同されていることに注意してください

理由:







その結果、ブロックでコピーするような些細なことでさえ、学習で学ぶのが難しい段階になります

emacs。



xorgでも火に水を追加しますブロックをコピーする真の方法:挿入を制御してコピーし、挿入をシフトします

ブロックを立てます。 この場合、マウスは1つのクリップボードにコピーされ、キーボードの選択は別のクリップボードに入ります。



初心者の場合、Cc CvをCc Cvから解放するために設計されたいわゆるcuaモードを有効にしようとしないで、すぐに「真の方法」を学ぶことをお勧めします。

標準emacsキーbindinds、エンドユーザーから便利な機能の大部分を奪います。 emacsを勉強したら、学ぶ

2つの追加キー:





大きな問題ではありません。 誰のために-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。 上下機能



キー:









構成:

 (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だけでなく、一般的にどこでも機能します):





定義はこちらをご覧ください: idomenu.el







7.3。 Speedbarを介した現在のファイルの関数およびクラス別







Scroll_Lockキーを構成しました:

 (global-set-key [Scroll_Lock] 'speedbar)
      
      











7.4。 変数の定義の場所に移動する[クラス、メソッド]







ロープを介して設定し、キーのブックマーク:









セットアップの欠点は、移行履歴がグローバルであり、すべての移行がブックマークにゴミを残すことです。

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。 しおり













 (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に直接関連するのではなく、便利な機能である任意のモードで動作します。 呼び出し元:





 (global-set-key [(control shift f)] 'find-name-dired)
      
      











7.7。 プロジェクトファイルを開く:rope-file-find







Djangoで表示するためのテンプレートファイルなど、リンクされたファイルを開くと特に便利です。









8. Pythonテキストの使用



8.1。 Python Ident左/右















8.2。 空白のテキストとの戦い













 (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。 テキスト内のコメント















 (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プロジェクトの操作に直接関連していますが、たとえばバージョン管理システムの操作などの機能です。これは別の記事に値します。



記事はまだ完成していません。コメントが届くと、間違いなく変更と追加を行います。



読者のコメントに期待すること





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および

ラップトップのマイクで。 第一に、キーストロークが大声で聞こえ、第二に、音が静かで、時には外来ノイズが聞こえます。 悲しいかな...多分私はを使用してビデオを再撮影します

ヘッドセットですが、これまでのところ-それがあります。 それらなしでより良いでしょう?



All Articles