Apakah ada cara untuk mengonversi nama yang dilampirkan unta untuk menggunakan garis bawah di emacs?


8

Misalnya, saya ingin mengonversi "CamelCasedName" menjadi "camel_cased_name". Apakah ada cara untuk melakukan ini di emacs?


4
Jawaban singkat untuk pertanyaan apa pun dari formulir "Apakah ada cara untuk _____ dalam emacs?" is Always "YA"
Brian Postow

Jawaban:


4

Ini sedikit kode dari halaman ini , dengan fungsi pembungkus dan garis bawah menggantikan tanda hubung dengan garis bawah, dapat dengan mudah diubah menjadi perintah untuk melakukan itu. (Periksa apakah itu memperlakukan caps terkemuka yang sesuai dengan Anda):

Contoh kode EmacsLisp untuk membatalkan CamelCase sebuah string (dari http://www.friendsnippets.com/snippet/101/ ):

(defun un-camelcase-string (s &optional sep start)
  "Convert CamelCase string S to lower case with word separator SEP.
Default for SEP is a hyphen \"-\".

If third argument START is non-nil, convert words after that
index in STRING."
  (let ((case-fold-search nil))
    (while (string-match "[A-Z]" s (or start 1))
      (setq s (replace-match (concat (or sep "-") 
                                             (downcase (match-string 0 s))) 
                                     t nil s)))
    (downcase s)))



2

Hanya untuk tujuan tampilan, Anda dapat menggunakan ini:

M-x glasses-mode

Jika Anda ingin skrip yang benar-benar mengubah teks, saya kira Anda harus menulis beberapa elisp. Pertanyaan itu lebih baik ditanyakan pada stack overflow.


2

Saya bisa melakukan ini di seluruh file dengan cepat hanya dengan permintaan ganti regexp .

Pola pencarian adalah \([a-z]+\)\([A-Z]\)\([a-z]+\)dan penggantiannya \1_\,(downcase \2)\3.

Pola penggantian menggunakan hak kanan dalam pola. Ini membutuhkan Emacs 22 atau lebih baru.

Dalam gaya dokumentasi emacs:

M-C-% \([a-z]+\)\([A-Z]\)\([a-z]+\) RET \1_\,(downcase \2)\3
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.