Ada saat-saat ketika saya mengedit file (manifestasi Wayang, misalnya) di mana saya ingin menyelaraskan konten buffer dengan cepat. Sebagai contoh, saya tahu saya bisa menggunakannyaalign-regexp
atau align
untuk menyelaraskan kode seperti ini, selama saya memilihnya:
# M-x align-regexp "=>" will line everything up nicely
file { "/etc/foo":
ensure => present,
mode => "0666",
source => "puppet:///modules/example/foo",
}
Tapi yang saya inginkan adalah agar ini terjadi dengan cepat - tanpa harus memilih wilayah atau seluruh buffer. Apakah ada paket atau mode yang akan melakukan ini, atau apakah ini sesuatu yang harus dibangun ke mode yang saya minati?
Sunting: Saya bertanya tentang Wayang dan CFEngine, karena itulah yang saya kode di sebagian besar hari ini dan saya memiliki preferensi yang kuat untuk teks selaras. Namun, saya juga penasaran (dan tidak mengungkapkan ini dengan baik) untuk mengetahui apakah on-the-fly alignment adalah fitur yang umum dalam mode Emacs (terutama dalam mode untuk bahasa pemrograman), atau jika kebanyakan orang menyelaraskan saat menyimpan atau di beberapa titik lain.
indent-region
denganalign-to-equals
dan definisikan fungsi ini sebagai(defun align-to-equals (begin end) (interactive "r") (align-regexp begin end "\\(\\s-*\\)=" 1 1 nil))
; danemacs-lisp-mode-hook
denganpuppet-mode-hook
.Jawaban:
Jika Anda ingin menandai wilayah untuk penyelarasan otomatis, maka itu mungkin tidak terlalu sulit untuk dilakukan dengan sesuatu seperti:
Tetapi jika Anda ingin sepenuhnya otomatis, Anda harus menemukan cara untuk mengkarakterisasi daerah mana yang ingin Anda luruskan secara otomatis (dan dengan regexp mana), yang lebih sulit. Saya kira Anda bisa memberikan beberapa regexps, dan kemudian memindai buffer untuk baris berturut-turut yang cocok dengan salah satu regexps itu.
sumber
my-auto-align
ini digunakan untuk mendefinisikan overlay ini (tandai wilayah yang ingin Anda selaraskan). Alasan (saya pikir) Stefan sedang mengalami semua masalah ini adalah karena (tidak seperti indentasi) jika Anda hanya mencoba menyelaraskan seluruh buffer, Anda akan mendapatkan hasil yang tidak diinginkan, jadi Anda perlu menyelaraskan potongan-potongan pada suatu waktu.Mode Wayang menyediakan
puppet-align-block
. Anda dapat mengatur agar fungsi ini dipanggil secara otomatis, misalnya dengan menambahkannya kepost-command-hook
lokal (belum diuji):Perhatikan bahwa ada alasan bagus untuk tidak melakukan ini. Ini tidak terlalu pintar, dan akan menimpa penyelarasan manual yang mungkin Anda lakukan di mana saja, yang akan sangat rusak, jika penyelarasan otomatis tidak berfungsi untuk beberapa kode Wayang yang lebih berbelit-belit.
Karenanya - berbicara sebagai pengelola Mode Boneka - saya sarankan untuk tidak melakukannya, dan kami tidak akan membantu Anda atau menerima laporan bug, jika Anda menggunakan kode ini.
Juga, untuk blok sumber daya besar, mungkin lambat, jadi Anda mungkin ingin menggunakan pengatur waktu idle alih-alih
post-command-hook
secara langsung.sumber