Bagaimana cara saya menonaktifkan sepenuhnya semua indentasi otomatis di Emacs? Saya perlu menonaktifkannya setidaknya untuk mode Fundamental, tapi saya baik-baik saja dengan itu dinonaktifkan secara global untuk sesi saat ini.
Harap baca sisa pertanyaan ini sebelum menyatakannya sebagai duplikat. Semua jawaban lain yang saya temukan adalah untuk menonaktifkan indentasi yang lebih bertarget. Saya benar-benar ingin sepenuhnya menonaktifkan semua lekukan-otomatis untuk seluruh sesi.
Pengaturan electric-layout-mode
untuk nil
tidak berfungsi.
Detail
Kadang-kadang saya suka menulis pesan komit besar Git dengan editor teks Windows ASCII saya. Pesan-pesan ini sering memiliki daftar peluru, blok kode, atau hal-hal lain di mana pemformatan yang tepat dalam dokumen sumber saya bermakna. Basis kode saya ada di Linux, dan saya terhubung ke kotak menggunakan klien SSH hanya teks. Ketika Git memasuki Emacs untuk mengedit pesan komit, saya ingin dapat menyalin pesan komit sumber ke clipboard Windows kemudian menempelkannya menggunakan perintah tempel Windows. Dari perspektif Emacs, saya mengetik apa yang ditemukan dalam file teks Windows. Sayangnya, ketika Emacs melihat garis lekukan, ia menambahkan lekukan otomatisnya sendiri, jadi saya mendapatkan segitiga ruang kosong yang besar ini di sepanjang tepi kiri buffer.
Saya menggunakan GNU Emacs 24.3.1.
Penanganan masalah
Solusi saya saat ini adalah mentransfer file teks Windows saya ke sistem file yang di-mount oleh host Linux saya, memuat file ke Emacs, kemudian gunakan kill dan yank untuk mentransfer konten. Ini agak kikuk.
Contoh
Ini contoh blok teks:
a
- b
c
d
Berikut ini tampilannya ketika saya menempelkannya ke Emacs-under-ssh via MSWin paste:
a
- b
c
d
Jika saya menekan C-h l
setelah melakukan tempel, inilah yang saya lihat. Perhatikan bahwa baris baru adalah input menggunakan C-j
, bukan RET
.
a C-j C-j SPC SPC - SPC b C-j SPC SPC SPC SPC c C-j
SPC SPC SPC SPC d C-j C-h l
sumber
hack-local-variables-hook
- untuk pada dasarnya membatalkan apa yang ditetapkan mode-mode utama lainnya sebagai bagian dari variabel mereka. inisialisasi standar.fundamental-mode
hanya sedikit fungsi di dalamsimple.el
- yaitu(kill-all-local-variables) (run-mode-hooks)
,.M-x find-function RET fundamental-mode RET
- Anda dapat memodifikasi / membuat sendiri sesuai kebutuhan; namun, jika Anda mengubah nama, itu tidak akan digunakan oleh beberapa fungsi - jadi pertimbangkan untuk menyimpan nama yang sama.:set paste
? Yang pada dasarnya mengatakan "jangan menyentuh teks yang ditempel dengan cara apa pun". Yang juga termasuk indentasi otomatis.Jawaban:
Emacs ≤24.3
Menekan RET tidak indent secara default (kecuali dalam beberapa mode pemrograman, yang Anda perlu memeriksa konfigurasi khusus mode, misalnya pengaturan "listrik").
Terminal Unix biasanya menempelkan karakter carriage return ketika konten clipboard berisi baris baru (diwakili oleh karakter umpan baris). Dalam Emacs, carriage return terlihat seperti
RET
kunci (pada kenyataannya,RET
adalah kereta karakter pulang), sementara pakan garis terlihat seperti (adalah)C-j
.Namun, dalam kasus Anda, menempelkan hasil baris baru di
C-j
, yang di Emacs terikat pada perintahnewline-and-indent
. Seperti namanya, perintah ini indentasi. Saya tidak tahu apakah Putty memiliki pengaturan yang dapat Anda ubah. Jika Anda ingin memperbaiki masalah pada akhir Emacs, ada solusi mudah yang saya pikir Anda tidak akan keberatan: ikatC-j
kenewline
(sama sepertiRET
).Emacs ≥24.4
Dalam Emacs 24.4, mode Indent Listrik dinyalakan secara default. Ini adalah mode minor global, sehingga Anda dapat mematikannya di mana saja dengan menelepon
(electric-indent-mode 0)
dan Anda dapat mengaktifkannya secara interaktifM-x electric-indent-mode RET
.Anda dapat menemukan informasi ini di manual, atau dengan melihat dokumentasi dari perintah yang dipanggil dengan menekan Return(tekan
C-h k RET
).Anda dapat menyalakannya di buffer tertentu dengan
electric-indent-local-mode
. Beberapa mode pemrograman (terutama yang pihak ketiga) mungkin memiliki fitur lekukan otomatis mereka sendiri yang tidak mengikuti pengaturan mode Indentrik Listrik.sumber
electric-indent-mode
dinonaktifkan secara default (ini konsisten dengan apa yang Anda katakan karena saya menggunakan Emacs 24.3.1). Mengaktifkan dan menonaktifkannya tidak membantu.electric-indent-local-mode
tidak tersedia untuk saya melaluiM-x
. BantuanRET
menyebutkan tiga pengaturan:use-hard-newlines
,auto-fill-function
, danfill-column
. Toggling atau memodifikasi mereka melaluiM-x use-hard-lines
,M-x auto-fill-mode
danM-x set-fill-column RET 0 RET
tidak membantu.emacs -q
? Harap tempel beberapa teks pendek yang mengandung baris baru (katakanfoo
baris barubar
) ke Emacs dan tekanC-h l
, apa yang Anda lihat?… f o o RET b a r
atau… f o o C-j b a r
atau… f o o RET C-j bar
atau sesuatu yang lain? Di terminal apa Anda menjalankan klien SSH?-q
tidak membantu (misemacs -q -nw --no-desktop
.). Saya melihatC-j
bukanRET
. Saya menggunakan Putty 0,63 sebagai klien SSH saya. Saya melihat perilaku yang sama denganTERM
set kescreen
danxterm
.global-set-key
peretasan memperbaiki masalahnya. Saya akan mencari cara untuk mengaturEDITOR
alias saya untuk menjalankannya secara otomatis saat startup ketika mengedit pesan Git commit. Baris baru disisipkan alih-alih carriage return karena saya telah mengonfigurasi editor teks Windows favorit saya untuk menggunakan ujung baris gaya UNIX alih-alih yang Windows.Anda juga dapat mencoba mode rekatkan kurung. Ini adalah fitur emulator terminal Anda (Putty dalam kasus ini, versi 0.63 dan lebih tinggi) yang menggunakan urutan melarikan diri untuk memberi sinyal bahwa pengguna menempelkan sesuatu, dan kemudian lagi ketika pasta berakhir. Ada paket Emacs yang disebut
bracketed-paste
yang dapat Anda instal, ini memungkinkan Emacs untuk mengenali urutan pelarian dan transisi ke keymap yang lebih aman selama durasi tempel. Ini tidak hanya mencegah lekukan dari kekacauan, tetapi juga mencegah pasta jahat dari menjalankan perintah di sesi emacs Anda menggunakanM-x
.sumber