Apakah ada cara untuk mengganti nama file yang terbuka di Emacs? Saat saya melihatnya? Sesuatu seperti save-as, tetapi yang asli harus pergi.
237
Coba fungsi ini dari .emacs Steve Yegge :
;; sumber: http://steve.yegge.googlepages.com/my-dot-emacs-file (defun rename-file-and-buffer (nama-baru) "Mengganti nama buffer saat ini dan mengajukan kunjungan ke NEW-NAME." (interaktif "sNew name:") (let ((nama (nama penyangga))) (nama file (nama file buffer)))) (jika (bukan nama file) (pesan "Buffer '% s' tidak mengunjungi file!" nama) (if (get-buffer-new-name) (pesan "Buffer bernama '% s' sudah ada!" nama baru) (progn (ganti nama file nama file nama baru 1) (ganti nama-buffer nama-baru) (set-visited-file-nama-nama baru) (set-buffer-modified-p nil))))))
Lihatlah halaman itu, ada fungsi terkait yang sangat berguna di sana, yang disebut "move-buffer-file".
(setq uniquify-buffer-name-style 'forward)
makna jika Anda memiliki penyangga bernamausers\index.html
(karena Anda sudah memiliki penyangga lainnyaposts\index.html
) pengubahan nama akan gagal(set-buffer-modified-p nil)
sepertinya tidak perlu. Jika Anda memanggilrename-file-and-buffer
buffer yang dimodifikasi dan kemudian mencoba membunuhnya, ia akan dengan senang hati melakukannya tanpa memperingatkan Anda tentang perubahan yang belum disimpan.Ya, dengan
dired
mode, Anda dapat:C-x d
untuk membuka diredRET
untuk memilih direktori file saat iniC-x C-j
(dired-jump
ke nama file saat ini, dalam Dired)R
untuk mengganti nama file (ataudired-do-rename
).q
untuk kembali ke buffer file (diganti namanya)Ganti nama sama dengan shell
mv
, tetapi itu juga akan memperbarui buffer terbuka, dan tidak sepertimv
itu tidak akan mengubah akses dan memodifikasi waktu pada file di sistem file.sumber
C-x C-j
default tidak terikat untuk saya. MelakukanM-x load-library RET dired-x RET
lebih dulu membuatnya terikat.C-x C-j
tidak terikat hanya dilakukanM-x dired-jump
pada saat pertama. Ini akan secara otomatis memuatdired-x
(yang juga akan menyebabkanC-x C-j
didefinisikan sejak saat ini).Hanya untuk kelengkapan, karena beberapa orang dapat mengunjungi halaman ini dengan berpikir bahwa mereka akan mendapatkan jawaban untuk fitur "save as" dari Emacs, itu Cx Cw untuk file yang terbuka.
sumber
File > Save as...
Favorit saya adalah yang dari Magnar (dari emacs rocks screencasts fame.)
Berbeda dengan alternatif lain, Anda tidak perlu mengetikkan nama dari awal - Anda dapat mengubah nama saat ini.
Terima kasih kepada James Yang untuk versi yang benar.
sumber
Inilah versi yang lebih kuat yang diadaptasi dari stevey.
sumber
Ini versi lain, cukup tangguh dan VC sadar:
Anda dapat membaca lebih lanjut di sini .
sumber
Jika Anda menggunakan Spacemacs maka Anda mendapatkan perilaku ini secara gratis karena dilengkapi dengan implementasi
rename-current-buffer-file
(berdasarkan pada magnars) yang secara default terikatSPC-f-R
.https://github.com/syl20bnr/spacemacs/blob/bd7ef98e4c35fd87538dd2a81356cc83f5fd02f3/layers/%2Bdistributions/spacemacs-base/funcs.el#L294
sumber
Ada cara yang sangat mudah, Anda menekan perintah Mx dan dari ketik vc-rename-file , setelah itu Anda hanya perlu memilih file Anda saat ini di direktori, dan daripada memilih nama baru. Buff yang memiliki file yang diubah akan di-refresh.
Sumber: https://www.gnu.org/software/emacs/manual/html_node/emacs/VC-Delete_002fRename.html
sumber
berdasarkan versi magnars, saya memodifikasi seperti di bawah ini, memperbaiki bagian nama file INIT:
sumber
Itu bisa dicapai dengan copy. shift + c pada file dan emacs akan meminta Anda untuk menunjukkan nama untuk path termasuk nama file, jadi Anda cukup memberikan nama baru, dan masukkan ... tentu saja, Anda harus Hapus yang sebelumnya.
sumber