Saya perlu mendapatkan path lengkap dari file yang saya edit dengan emacs.
- Apakah ada fungsi untuk itu?
- Jika tidak, apa fungsi elisp untuk mendapatkannya?
- Bagaimana cara menyalin hasil (nama jalur) ke papan klip sehingga saya dapat menggunakannya kembali?
Saya menggunakan Mac OS X dan Aqumacs.
(setq filepath (get-fullpath-current-file)) ???
(copy-to-clipboard 'filepath) ???
DITAMBAHKAN
(defun show-file-name () "Tunjukkan nama file jalur lengkap di minibuffer." (interaktif) (pesan (buffer-file-name)) (kill-new (nama-file-nama-file-nama-file)) ) (global-set-key "\ C-cz" 'show-file-name)
Menggabungkan dua jawaban yang saya dapatkan, saya bisa mendapatkan apa yang saya inginkan. Terima kasih atas jawabannya. Dan beberapa pertanyaan lagi.
- Untuk apa (file-truename)?
- Dapatkah saya menyalin nama jalur ke papan klip Sistem (OS), bukan cincin pemutus sehingga saya dapat menggunakan info tersebut dengan aplikasi lain?
buffer-file-name
adalah variabelM-x
?funcall
untuk memanggil fungsi yang disimpan sebagai nilai variabelfoo
, karena jika Anda menggunakan(foo)
Anda akan menggunakan slot fungsifoo
daripada slot nilai.Untuk meminjam dari jawaban Jérôme Radix, jika Anda hanya ingin melihat jalur file buffer saat ini dengan cepat, Anda dapat melakukannya
M-: buffer-file-name
.Bergantian, ketik
(buffer-file-name)
buffer di suatu tempat dan jalankanC-x C-e
di kurung tutup (ini akan bekerja dalam mode apa pun, bukan hanya mode lisp).sumber
buffer-file-name
sebagai fungsi, tetapi tidak muncul diM-x
, tetapi munculM-:
sebagaiemacs eval
, di sana saya dapat menjalankan perintah, berkat jawaban Anda :)M-x
hanya menjalankan fungsi interaktif, sedangkanM-:
menjalankan fungsi elisp apa pun.Trik saya adalah melakukan
C-x C-f
like untuk membuka file, itu akan mengisi minibuff dengan jalur file saat ini,C-g
untuk keluar. Lebih cepat dariM-: buffer-file-name
tapi jauh lebih jelek dari metode lainnya.sumber
Implementasi langsung dari apa yang Anda inginkan adalah:
Karena itu, saya merasa sangat berguna untuk bisa mendapatkan jalur lengkap dari apa yang ada di minibuffer, dan inilah yang saya gunakan:
Dan kemudian jika saya menginginkannya di clipboard, saya hanya mematikan baris ( C-a C-k). Tetapi kita dapat dengan mudah menyalin nama asli ke clipboard pada perintah di atas, cukup ubah baris terakhir menjadi:
Bagian baru adalah panggilan
'kill-new
yang menempatkan string di cincin penghentian.sumber
Tidak perlu fungsi ekstra, cukup
sumber
C-x C-f
, menjalankanM-! pwd
, laluM-x cd
memilih direktori lain, lalu menjalankanM-! pwd
lagi.Saya memiliki kode berikut sudah digunakan untuk waktu yang lama. Ini menyalin path file lengkap ke kill ring ketika saya menekan tombol tengah mouse pada nama buffer di mode-line. Ini hanya menyalin nama buffer ke kill-ring ketika saya menekan shift-mouse-2 pada nama buffer di mode-line.
sumber
C-x C-d
, juga dapat dipanggil melaluiM-x list-directory
, akan menampilkan direktori untuk file Anda saat ini, dan Anda hanya perlu menekan tombol "Enter" untuk menghapus minibuffer. Detail tambahan tersedia di sini .sumber
C-x C-b
menunjukkan daftar buffer dan jalur file untuk setiap buffer jika berlaku.sumber
C-u C-x C-b
daftar buffer yang sedang mengunjungi file.sumber
Anda bisa jika Anda keluar untuk sesuatu seperti xclip (Linux), pbcopy (Mac), putclip (Cygwin).
Saya pribadi menggunakan skrip pembungkus
c
danp
untuk salin dan tempel masing-masing, bacaan pertama dari input standar, tulisan terakhir ke output standar. Dengan begitu, ini berfungsi di semua platform pengembangan saya:Saya merasa ini lebih dapat diandalkan dan dapat dikonfigurasi daripada menggunakan dukungan papan klip Emacs. Misalnya,
c
perintah saya menyalin input ke semua 3 papan klip di Linux (primer, sekunder, papan klip), jadi saya dapat menempel dengan Ctrl-V atau klik tengah.sumber
date | xclip
danxclip file
keduanya berfungsi seperti yang diiklankan (menyimpan tanggal atau konten file ke primer) jika diketik di shell. Tetapi jika saya mengetik salah satu dari perintah ini setelah M-! di emacs (dan tekan kembali) tidak ada yang terjadi; kursor tetap berada di minibuffer seolah-olah mengharapkan lebih banyak input; dan jika saya menyela untuk mendapatkan kembali kendali, tidak ada yang disimpan di primer.(shell-command (format "echo '%s' | xsel -i" buffer-file-name))
- dan ketika dibuat menjadi perintah interaktif (seperti yang disarankan dalam jawaban yang paling banyak dipilih oleh @JeromeRadix di atas), ini adalah KEBERANGKATAN BESAR! Terima kasih!Cara paling sederhana dan pasti
Meminjam dari Trey Jackson, saya mendapatkan ini:
Anda dapat menemukan informasi lebih lanjut di situs
sumber
copy-buffer-file-name-as-kill
dari [0] menurut saya melakukan apa yang Anda butuhkan. Ini juga memiliki opsi untuk menyalin hanya nama direktori, atau hanya nama file.[0] http://www.emacswiki.org/emacs/download/buffer-extension.el
sumber