現在のファイルをわずかに異なる名前で保存します


17

私のファイルには長いファイル名があり、ファイル名の一部は日付とバージョン番号です。多くの場合、バージョン番号または日付を変更するだけで、ほぼ同じ名前を使用してファイルをバッファーに保存したいと思います。

現在のバッファのファイル名をキルリングに入れるコマンドがあれば、これははるかに簡単です。そのため、ファイルを開き、C-x C-w(ファイルを書き込む)と入力し、Cyで現在の名前をヤンクし、変更して保存しますそれ。

WindowsではEmacs 24.3を、Linuxでは24.4を使用しています。さまざまな理由で、gitではなく異なるファイル名を使用する必要があります。このコマンドがAUCTeX / LaTeXをメジャーモードとして使用できたら幸いです。


編集1:

私はミスを犯した:私はタイプしたくないC-x C-f(=ファイルを見つける)が、C-x C-w(=ファイルを書き込む)。上記を修正しました。

編集2:

重複した質問と回答を見つけました:https : //unix.stackexchange.com/a/45381しかし、これ以上の答えはありません!

編集3:

ここ:http ://www.gnu.org/software/emacs/manual/html_node/elisp/File-Name-Components.htmlは関数であり、filnameの「非ディレクトリ」部分を選択します。

機能:ファイル名非ディレクトリファイル名

This function returns the nondirectory part of filename.

          (file-name-nondirectory "lewis/foo")
               ⇒ "foo"
          (file-name-nondirectory "foo")
               ⇒ "foo"
          (file-name-nondirectory "lewis/")
               ⇒ ""

Lispしか知らなかったら...


ああ、こんにちは。Keks:)私は実際に何度も自分自身を疑問に思ってきました...良い質問です。そして、Lispはある簡単な ......
ショーン・オールレッド

ちょうどこの質問を見つけました...好奇心から:「さまざまな理由」アドバイザー/共著者関連...?
mbork 14

1
@mbork私は弁護士であり、契約書と同様に手紙を書きます。誰かへの最近の手紙を開いて、名前を変更し、コンテンツを消去し、同じ人に新しい手紙を書き始める方が、ゼロから始めるよりも速くなります。しかし、契約の名前を変更することはcvsの代用としては不十分ですが、LaTeXとGitを使用する別の弁護士に会ったことがないため、契約の新しいバージョンに新しいファイル名を付ける必要があります...
Keks Dose

けっこうだ。YASnippetはどうですか?ユースケースに非常に適しているようです。
mbork

@mborkはい、私のテンプレートでは、長年からYASnippetsを使用しています。LaTeX、Emacs、orgmode、YASnippetsは、私のPCをWordやOutlookよりもはるかに信頼性の高いものにします。OK、これをLinuxマシンで書いていますが、通常のITヘルプデスクでは本当に期待できません。WindowsではなくLinuxをサポートします。
ケクス線量14

回答:


23

すべてを行う必要はありません。

単に:

  1. まだ元のファイルで、を押しC-x C-wます。新しいファイル名の入力を求められます。
  2. を押すM-nと、現在のファイル名が挿入されます。
  3. 必要なものを編集し、ヒットRETしてこの新しい名前でファイルを保存します。

元のファイルはそのまま残ります。戻りたい場合は、でもう一度アクセスしてくださいC-x C-f


Files / SavingについてEmacsのマニュアルを調べましたが、このトリックは見つかりませんでした。あなたはどのようにして知りました?すごい!
ケクス線量14年

4
わからない。これは、ミニバッファプロンプトに関する一般的なことです。Mpを押すと履歴が表示され、Mnを押すと「現在の」オプションが表示されます。
マラバルバ

5
使用している場合はidoC-f最初に実行してくださいM-n
カウシャルモディ14年

1
うわー、私はこれを知らなかった。ありがとう!(「ありがとう、私も」コメントを申し訳ありませんが、これはシンプルだが有用な何かを学ぶ素晴らしい例です。Vivala emacs.stackexchange!
Mark Aufflick 14年

3

現在のバッファ内のファイル名をコピーする

これは、現在のバッファファイル名をコピーしてミニバッファに表示するCameron Desautelsのブログから使用している関数です。

 
;; ソース:http://camdez.com/blog/2013/11/14/emacs-show-buffer-file-name/
(defun show-copy-buffer-file-name()
  「ミニバッファ内の現在のファイルへのフルパスを表示し、キルリングにコピーします。」
  (インタラクティブ)
  (let((ファイル名(バッファファイル名))))
    (ファイル名の場合
        (予言
          (メッセージファイル名)
          (kill-newファイル名))
      (エラー「バッファがファイルにアクセスしていない」))))

現在のバッファ内のファイルの名前を変更する

Magnar Sveen、ブログの1つで以下の機能を実装し、現在のバッファーの名前を一度に変更できるようにしました。これはあなたが求めたものではありませんが、あなたのユースケースに関連していると思います。

;; ソース:http://www.whattheemacsd.com/
(defun rename-current-buffer-file()
  「現在のバッファと訪問しているファイルの名前を変更します。」
  (インタラクティブ)
  (let((name(buffer-name)))
        (ファイル名(バッファファイル名)))
    (if(not(およびfilename(file-exists-p filename)))
        (エラー「バッファ '%s'はファイルにアクセスしていません!」の名前)
      (let((new-name(read-file-name "New name:" filename))))
        (if(get-buffer new-name)
            (エラー「 '%s'という名前のバッファは既に存在します!」new-name)
          (ファイル名の変更ファイル名新しい名前1)
          (名前変更バッファの新しい名前)
          (セット訪問ファイル名新しい名前)
          (set-buffer-modified-p nil)
          (メッセージ「ファイル「%s」は「%s」に正常に名前変更されました。」
                   名前(ファイル名非ディレクトリの新しい名前)))))))

Magnar Sveenによるソリューションは、元のファイルを削除します。その後、名前が変更されたファイルのみが存在します。これは便利ですが、名前を変更したファイルだけでなく古いファイルも保持する必要があります。Cameron Desautelによる機能は、ファイル名をパス全体とともにコピーします。これは私が必要とするソリューションに非常に近いものです。この関数を変更して、パスなしでファイル名のみを流出させる方法を知っていますか?しかし、どうもありがとう。
ケクス線量14年

1
@KeksDose は、ファイル名sansディレクトリを取得する最初の関数でに変更(buffer-file-name)するだけ(file-name-nondirectory (buffer-file-name))です。
nispio 14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.