9

多くの場合、現在開いているファイルの単純なテキスト コピーを取得する必要があります。理由は通常次のとおりです。

  • リストを同僚に送りたい
  • 自分が取り組んでいることを文書化したい (通常は組織文書)
  • シェルで、現在開いているファイルの 1 つを操作したいと考えています。そのためのパス名をコピーして貼り付ける必要があります。

実際には、開いているバッファをナビゲートするための通常のbuffer-menuまたはlist-buffers便利なメニューを提供していますが、開いているファイルの名前を端末にコピーして貼り付けたり、上記のアクションを実行したりするのは非常に不便です。例: 行をダブルクリックして完全なパス名を選択することはできません。また、kill/ yankemacs シーケンスを使用してパス名をコピーすることもできません。

概要: 他のデータなしで、開いているファイルのリストをテキスト ファイル (または新しいバッファー) にエクスポートする方法が必要です。ファイルサイズ、モード、またはその他の emacs メタデータはありません。

そのためのコマンドはありますか?インストールできる追加パッケージはありますか?

編集

何が行われたかについてのフィードバックを提供するために修正された Trey Jackson によるソリューションの追加:

(defun copy-open-files ()
  "Add paths to all open files to kill ring"
  (interactive)
  (kill-new (mapconcat 'identity 
                       (delq nil (mapcar 'buffer-file-name (buffer-list))) 
                       "\n"))
  (message "List of files copied to kill ring"))
4

3 に答える 3

9

このコマンドはあなたのために仕事をします:

(defun copy-open-files ()
  "Add paths to all open files to kill ring"
  (interactive)
  (kill-new (mapconcat 'identity 
                       (delq nil (mapcar 'buffer-file-name (buffer-list))) 
                       "\n")))
于 2012-05-10T16:05:38.970 に答える
6

*Buffer List*バッファのモードを変更できます。デフォルトでは mode になりますが、 orにBuffer Menu変更すると特別な動作がすべて削除され、通常のバッファと同じようにカット アンド ペーストできるようになります。メタデータは で簡単に切り取ることができます。text-modefundamental-modedelete-rectangle

または、elisp を使用してプログラムでバッファ リストにアクセスすることもできます。

(dolist (buffer (buffer-list))
  (when (buffer-file-name buffer)
    (insert (buffer-file-name buffer) "\n")))
于 2012-05-10T15:57:29.320 に答える
1

確かに、バッファリストからコピーしてヤンクできるはずです。

たとえば、 ですべてをコピーしてC-xhM-wから、編集用に新しいバッファにヤンクします。

于 2012-05-10T21:28:44.307 に答える