Emacs - Beberapa kolom satu buffer


165

Saya mencoba mengedit beberapa kode rakitan yang cenderung diformat dalam daftar yang panjang namun tipis. Saya ingin dapat menggunakan beberapa hektar ruang horizontal yang saya miliki dan melihat lebih banyak kode di layar pada satu waktu. Apakah ada metode untuk mendapatkan Emacs (atau memang editor lain) untuk menunjukkan kepada saya beberapa kolom semua menunjuk ke buffer yang sama?

Cx 3 (emacs) dan: vsplit (vim) bagus untuk beberapa tampilan terpisah ke dalam kode, tapi saya ingin itu mengalir dari satu kolom ke yang lain (seperti teks di koran).


1
Cx 3 dan: vsplit bagus untuk beberapa tampilan terpisah ke dalam kode, tapi saya ingin itu mengalir dari satu kolom ke yang lain (seperti teks di koran)
user119857

1
Terima kasih! Saya jatuh cinta dengan tampilan kode kolom 4-6 yang saya coba memformat semua kode saya menjadi 30-40 karakter, dan saya sangat menyukai hasilnya - dengan membuat semua baris pendek, bukan hanya yang pendek secara alami, jauh lebih sedikit ruang terbuang, dan semua ruang layar saya digunakan untuk menampilkan teks; juga, blok kode menjadi lebih 2 dimensi, memudahkan pemahaman visual dan pengawasan struktural.
Erik Kaplun

Jawaban:


248

Lihat mode ikutan . Kutipan:

Mode tindak adalah mode minor yang membuat dua jendela, keduanya menampilkan buffer yang sama, gulir sebagai "jendela virtual" yang tinggi. Untuk menggunakan mode Ikuti, buka bingkai hanya dengan satu jendela, bagi menjadi dua jendela berdampingan menggunakan Cx 3, dan kemudian ketik Mx ikuti-mode. Sejak saat itu, Anda dapat mengedit buffer di salah satu dari dua jendela, atau gulir salah satunya; jendela lain mengikutinya. Dalam mode Follow, jika Anda memindahkan titik di luar bagian yang terlihat di satu jendela dan ke bagian yang terlihat di jendela lain, yang memilih jendela lain — lagi, perlakukan keduanya seolah-olah mereka adalah bagian dari satu jendela besar.

3
Bisakah saya menggunakan ini dengan lebih dari dua jendela? Bisakah saya menggunakan empat jendela?
Yktula

Saya bertanya-tanya apakah mungkin untuk mengedit dua kolom dari sumber yang sama secara individual, tidak dibagi dalam dua jendela. Ini bukan contoh terbaik tetapi bayangkan bahwa saya memiliki satu kolom untuk kode skrip dan yang lainnya untuk komentar maka jika saya berada di kolom kedua saya ingin menekan "enter" dan melanjutkan di baris berikutnya tetapi di kolom kedua. Apakah ini mungkin dengan Emacs atau editor teks lainnya?
sw.

Sangat berguna untuk mengedit fungsi atau metode yang sangat panjang. saya selalu menemukan mode ini dan membuka dua buffer dan melakukan ini sendiri, terima kasih huaiyuan
Yuan He

17

Saya menggunakan fungsi ini untuk memanggil follow-mode, meskipun itu akan membutuhkan penyesuaian untuk ukuran layar yang berbeda:

;;; I want a key to open the current buffer all over the screen.
(defun all-over-the-screen ()
  (interactive)
  (delete-other-windows)
  (split-window-horizontally)
  (split-window-horizontally)
  (balance-windows)
  (follow-mode t))

Plus 1 untuk menunjukkan (balance-windows) sendirian! Saya kira Anda bisa membuatnya memisah beberapa kali parametrik dan membuat fungsinya interaktif. Juga, pengaturan scroll-marginuntuk 0masuk akal follow-mode.
Erik Kaplun


2

Vim dapat melakukan ini dengan menggunakan :vsplit- dan Anda dapat memiliki buffer yang sama terbuka di beberapa "jendela" (yang sebenarnya adalah bagian dalam "jendela" tunggal).

Dokumentasi di sini


3
emacs dapat melakukan itu juga, seperti yang disebutkan dalam pertanyaan, tetapi bukan itu yang ditanyakan.
justinhj

1
Kombinasikan itu dengan :scrollbind, dan Anda ada di sana.
bastibe

@ Kragen - Metode untuk melakukan ini adalah: 1. membagi jendela secara vertikal, sehingga buffer tunggal terlihat di dua jendela 2. gulir di jendela kedua sehingga baris pertama di jendela kedua muncul setelah baris terakhir di jendela pertama, 3. mengeluarkan perintah :set scrollbinddi masing-masing windows. Sekarang windows akan bergeser bersama seperti yang diinginkan. (Catatan: scrollopt harus mengandung opsi 'ver'.)
Herbert Sitz

Hmm, itu semacam pekerjaan. Keren! Terima kasih! Seseorang harus menulis skrip vim untuk melakukan ini secara otomatis.
Kragen Javier Sitaker

-1

Pandangan cepat pada emacs wiki tidak menunjukkan mode seperti yang Anda jelaskan. Namun, seharusnya tidak terlalu sulit untuk menulis satu ... Anda hanya perlu membagi jendela dengan Cx 3 dan memindahkan teks di jendela lain ke bawah, dan setiap kali Anda memindahkan teks, lakukan hal yang sama ke jendela lainnya. ..

Masalah dapat terjadi ketika Anda sampai ke bagian bawah buffer, apakah Anda ingin kursor langsung pergi ke jendela lain di atas?

Hmm, mungkin itu tidak mudah. Tapi itu harus tetap bisa dilakukan ...


1
... dan begitu Elisp ditambahkan ke hal-I-kebutuhan-untuk-belajar-daftar :) Banyak terima kasih Brian;)
user119857

Jelas, seseorang sudah melakukannya, tapi ya, elisp adalah alat yang luar biasa!
Brian Postow

-5

ini adalah perilaku default emacs ketika membelah jendela (Cx 3 untuk pemisahan vertikal) Anda mendapatkan dua kolom yang keduanya memiliki buffer saat ini terbuka


1
Tetapi dalam hal ini, ini tidak dalam mode tindak lanjut. Mode ikuti akan memastikan bahwa setiap buffer akan diposisikan di "halaman berikutnya" sehingga Anda dapat membaca buffer dengan menggerakkan mata Anda daripada memindahkan titik.
jrockway

-7

Gunakan pemisahan vertikal dengan Cx 3. Ini akan membagi buffer saat ini menjadi dua kolom yang Anda dapat beralih antara dengan Cx o.


2
Ini tidak mengalir secara otomatis dari satu kolom ke kolom lainnya.
kmarsh
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.