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および
ラップトップのマむクで。 第䞀に、キヌストロヌクが倧声で聞こえ、第二に、音が静かで、時には倖来ノむズが聞こえたす。 悲しいかな...倚分私はを䜿甚しおビデオを再撮圱したす
ヘッドセットですが、これたでのずころ-それがありたす。 それらなしでより良いでしょう

Source: https://habr.com/ru/post/J151167/


All Articles