Bagaimana saya bisa meniru kode lipat Vim?

28

Lipat kode di Emacs

Terkadang saya ingin melipat blok teks. Di Vim Anda dapat melipat dengan mudah tanpa bulu halus. Tanpa menambahkan karakter khusus seperti "spidol" atau regex spesifik seperti {{{. Saya ingin memilih daerah dan melipatnya, tanpa mengacaukan strukturnya.

Saat melihat-lihat, sepertinya sudah ada pertanyaan tentang kode lipat di Emacs. Seseorang berkata bahwa "tidak ada solusi yang sempurna". Misalnya, saya membuat klip lipat kode sederhana di Vim:

Vim lipat polos

masukkan deskripsi gambar di sini

+ Cukup sederhana, pilih wilayah dan lipat.
+ Ini gigih. Ketika Anda membunuh buffer / tutup Vim. Dan buka kembali file tersebut, lipatannya masih ada.
+ Anda mendapatkan bilah sorot, untuk dengan mudah melihat apa yang dilipat.

Ada banyak konfigurasi lipat lainnya untuk Vim. Saya senang dengan Emacs, tetapi ini adalah satu hal yang saya rindukan. Alternatif lain yang saya coba, misalnya HideShow:

Sembunyikan tampilan

masukkan deskripsi gambar di sini

Alternatif jahat dengan hide-show minor mode. Saya merasa tidak dapat digunakan:

- Saya tidak dapat memilih wilayah dan melipatnya. Itu terlipat pada blok kode.

- Tidak ada bar higlihgting atau sesuatu, untuk menghadiri Anda itu dilipat Anda bisa dengan mudah melewatkannya.

- Tidak gigih. Jika Anda membuka kembali file, lipatan hilang.

Ada paket lain, Lipat ini :

Lipat ini

masukkan deskripsi gambar di sini

- Ini alternatif yang cantik. Namun, itu mengacaukan lekukan, karena teks di bawah flip ditempatkan di sebelah flip ... (?).

- Ini hanya dapat memilih wilayah secara visual dan melipatnya. Tapi itu mematahkan indendasi, sehingga ikhtisar menjadi kacau. Sangat tidak berguna.

- Tidak ada bar higlihgting atau sesuatu, untuk menghadiri Anda itu dilipat. Anda bisa dengan mudah melewatkannya.

apa masalahnya?

Saya ingin meniru bagaimana Vim melipat. Tetapi ketika saya mencari di sekitar, sepertinya sangat sulit untuk melakukannya di Emacs. Jadi saya ingin tahu apakah ada sesuatu dalam emacs atau arsitekturnya yang membuatnya sulit untuk meniru ini? Apa batasannya?

ReneFroger
sumber
2
Saya merasa pertanyaannya terlalu luas, jadi saya memilih untuk menutup atas dasar itu. Saya akan merekomendasikan bahwa poster asli memilih beberapa perpustakaan yang menyediakan beberapa fitur yang dicari, dan kemudian menggabungkan / memodifikasinya sesuai keinginan. Jika OP mengalami kesulitan mengimplementasikan / memodifikasi fitur tertentu , maka posting pertanyaan tertentu terbatas pada satu masalah. OP mungkin dapat mencapai efek visual yang diinginkan, tetapi harus disiapkan untuk menjadikannya proyek yang berkelanjutan untuk dikerjakan dari waktu ke waktu.
lawlist
3
Bisakah Anda jelaskan fitur lipat apa yang Anda inginkan? Sebagai aturan, Anda tidak dapat mengharapkan orang di situs ini mengetahui cara kerja pelipatan kode Vim, dan lagi pula Anda harus memberi tahu kami fitur mana yang Anda inginkan secara spesifik. Satu-satunya informasi yang Anda berikan tentang apa yang Anda inginkan adalah animasi yang hanya menampilkan satu contoh, dan lagi pula saya tidak tahu apa yang diilustrasikannya: mereka tidak menunjukkan perintah apa yang Anda gunakan, mengapa Anda memindahkan kursor ke tempat ini atau itu, dll. Plus di browser tipikal mereka bermain dalam satu lingkaran dan tidak mungkin untuk mengetahui kapan pengulangan dimulai.
Gilles 'SANGAT berhenti menjadi jahat'
3
penahanan harus dihapus dari pertanyaan ini. seperti saat ini berdiri itu cukup spesifik. tidak memiliki jawaban atas pertanyaan itu bukanlah alasan yang baik untuk menutupnya.
Ista
2
ar-hide-region-atpt, ar-show-region-atpt dari 'thing-at-point-utils.el', github.com/andreas-roehler/thing-at-point-utils - tolong batalkan pemblokiran agar mungkin jawaban biasa.
Andreas Röhler
1
Pertanyaannya, seperti yang saya pahami, pada dasarnya adalah: " Seseorang: Tolong tuliskan seluruh perpustakaan untuk Emacs yang akan menyediakan fitur pelipat kode persis seperti yang ditemukan di Vim. " Saya melihat dari beberapa komentar dan penilaian bahwa ada cukup orang yang ingin melihat ini menjadi kenyataan. Namun, saya tidak melihat bagaimana ini bisa masuk ke dalam jawaban - perpustakaan baru yang diusulkan perlu dipelihara, dengan masalah dan perbaikan bug. Saya juga tidak keberatan seseorang menulis seluruh perpustakaan dengan fitur baru yang keren untuk melipat kode.
hukum

Jawaban:

16

Cobalah vimish-fold.

fitur

  • termasuk baterai: aktifkan mode minor, ikat beberapa perintah dan semuanya hanya akan berfungsi;

  • ini bekerja pada wilayah yang Anda pilih;

  • gigih: ketika Anda menutup file, lipatan Anda tidak hilang;

  • selain persisten, skalanya juga bagus, Anda dapat mengerjakan ratusan file dengan banyak lipatan tanpa efek buruk;

  • sudah jelas bagian teks mana yang dilipat;

  • itu tidak merusak lekukan atau sesuatu;

  • itu bisa melipat lipatan hanya dilipat (oh, saya);

  • untuk penggemar avypaket: Anda dapat menggunakan avyuntuk melipat teks dengan sedikit stroke kunci!

Pemakaian

Buat pengikatan untuk beberapa / semua fungsi ini:

  • vimish-fold - lipatan dasar wilayah yang dipilih;

  • vimish-fold-unfold- Anda tidak benar-benar perlu untuk mengikat ini, cukup gunakan C-gketika titik ditempatkan pada header yang mewakili teks yang dilipat;

  • vimish-fold-unfold-all - namun demikian ini mungkin berguna;

  • vimish-fold-refold - ya, Anda bisa melipatnya kembali;

  • vimish-fold-avy- gunakan avyuntuk melipat teks Anda!

Anda dapat mengubah vimish-fold-modesecara selektif untuk mode di mana Anda ingin memiliki lipatan persisten, atau cukup aktifkan di mana saja:

(vimish-fold-global-mode 1)
Mark Karpov
sumber
apakah Anda memiliki binding kunci yang disarankan? Ikatan apa yang Anda gunakan saat Anda dalam mode C ++? Mode C? Mode python? Mode gundul? Mode ELisp? Mode JavaScript?
Reb.Cabin
1
@ Reb.Cabin, ini bukan paket mode khusus, jadi binding kunci global adalah pilihan terbaik. Saya menggunakan binding kunci yang tidak melibatkan kunci-kunci dan kebanyakan orang akan menganggapnya agak aneh, saat ini saya punya: menu v fvimish-fold, menu v avimish-fold-avy, menu v uvimish-fold-unfold-all, menu v vvimish-fold-refold. Kebanyakan keybinds saya seperti ini, ini adalah konfigurasi saya .
Mark Karpov
Apakah ini terintegrasi dengan gerakan jahat dan objek teks?
PythonNut
1
Hm ... Saya akan mulai mengerjakan PR.
PythonNut
1
Saya, untuk satu, menemukan vimish-fold sama sekali tidak dapat digunakan. Mungkin itu intuitif bagi mereka yang sudah terbiasa dengan kode-lipat di vim ... Saya tidak tahu. Juga, saya tidak mengerti mengapa melipat dalam mode-org berfungsi dengan baik, tetapi Emacs belum memiliki kode-lipat yang baik ...
kjo