Di vanilla Emacs, saya harus melakukan C-x b
dan kemudian secara manual mengetikkan nama buffer untuk beralih. Jika saya lupa nama buffer, saya harus menekan TAB
ke daftar kemungkinan penyelesaian. Adakah yang bisa saya lakukan untuk mempercepat proses ini?
key-bindings
buffers
cycling
nixeagle
sumber
sumber
C-x C-<left/right>
untuk mengganti buffer dengan cepat. Ketika perlu beralih ke buffer "lebih jauh", saya menggunakanIBuffer
.Jawaban:
Ada mode ido yang seharusnya membantu.
SUNTING:
letakkan ini di file init Anda, untuk mengaktifkan mode ido secara default:
(ido-mode 1)
Sekarang,
C-x b
akan menunjukkan daftar kandidat.Letakkan ini di file init Anda, jika Anda lebih suka item ditampilkan secara vertikal:
(setq ido-separator "\n")
Atas perkenan ergoemacs
Izinkan saya juga menyarankan posting ini berbicara tentang beralih ke buffer sebelumnya / selanjutnya.
sumber
Saya baru saja mulai menggunakan
C-x <left>
danC-x <right>
. Keduanya adalah binding standar Emacs — tidak ada yang perlu dikonfigurasi. Kiri membawa Anda kembali ke buffer sebelumnya (awalnya sama denganC-x b RET
) tetapi melakukannya lagi akan membawa Anda ke buffer ke-3 yang terakhir dikunjungi. Jika Anda sering bolak-balik antara 3 atau 4 buffer banyak maka saya merasa jauh lebih mudah daripada mencoba mengingat nama buffer.Saya juga baru saja menemukan
C-x C-<left>
danC-x C-<right>
terikat ke fungsi yang sama sehingga Anda bisa tahan tombol kontrol dan bergantian antara x dan panah untuk membalik buffer. Cukup bagus!sumber
Anda bisa menggunakan Helm .
Dalam pengaturan saya, saya telah beralih
C-x b
untukM-l
. Ini bersekutu denganhelm-buffers-list
, membuat prosesnya cukup cepat, setidaknya untuk saya.sumber
ido
atauiswitchb
atauicicles
, hal-hal seperti itu, tetapi mereka pada dasarnya usang oleh Helm. Ya,ace-jump-buffer
itu keren, tetapi tidak secepat Helm, karena sebelum Anda tahu kunci apa yang harus ditekan, Anda harus menemukan buffer dalam daftar. Helm memungkinkan Anda mempersempit daftar dengan beberapa penekanan tombol yang sudah Anda ketahui (seperti nama buffer). Saya gunakanC-TAB
untuk mengganti buffer, memuat file terbaru, bookmark, dll. Tidak ada yang lebih cepat.helm
. Tapi saya lebih suka menggunakanhelm-mini
, yang juga menunjukkanRecentf
kepada Andahelm-buffers-list
.ivy-switch-buffer
.Hanya untuk menambahkan tweak yang saya gunakan dengan Ido yang telah disebutkan :
Saya juga menggunakan
ace-window
untuk beralih di antara buffer bersama denganace-jump-mode
untuk melompat di antara jendela yang terlihat. Datang dengan beberapa membiasakan diri tetapi pantas untuk dicoba.Saya telah mengombinasikannya dengan
key-chord-mode
dan menekanso
untuk lompatan cepat:Semua paket yang disebutkan di atas tersedia melalui manajer paket dari Melpa.
sumber
use-package
denganrequire
untuk mencegah kebingungan. Dalam contoh yang diberikan, tidak ada kebutuhan khusus bagi pengguna untuk menginstal paket tambahan untuk mengimplementasikan solusi itu.Seperti @kuanyui katakan dalam komentar,
next-buffer
&previous-buffer
sangat cepat, jika Anda hanya memiliki beberapa buffer untuk di antaranya. (Untuk lebih dari beberapa, dan untuk lebih banyak fitur pemilihan buffer, saya menggunakanicicle-buffer
.)Namun, secara default,
next-buffer
danprevious-buffer
berada pada kunci awalanC-x
,.Itu berarti bahwa mereka tidak dapat diulang : Anda tidak bisa hanya memukul
C-x <right> <right> <right>...
. Sebagai gantinya Anda harus mengikat perintah-perintah ini ke tombol yang berbeda dan dapat diulang, atau Anda harus menggunakannyaC-x <right> C-x <right> C-x <right>...
, yang tidak terlalu cepat.Untuk versi berulang dari perintah-perintah ini, muat pustaka
misc-cmds.el
dan remap vanilla, versi yang tidak dapat diulang ke yang berulang yang didefinisikan di sana:(Demikian pula, di perpustakaan yang sama Anda akan menemukan versi
undo
yang dapat diulang bahkan ketika pada kunci awalan:.undo-repeat
)BTW, Anda dapat membuat cukup banyak setiap perintah berulang (bahkan pada kunci awalan), dengan menggunakan fungsi
repeat-command
(darimisc-cmds.el
). Ini semua yang diperlukan untuk mendefinisikan versi berulangnext-buffer
:sumber
C-,
danC-.
untuk mendapatkan pengulangan, dan selagi Anda menggunakannya, aturC-x.
danC-x,
keother-window
dan(lambda()(interactive)(other-window -1))
. Bersepeda windows mungkin membutuhkan pengulangan yang lebih sedikit, dan Anda pergi dalam satu menit, tanpa paket tambahan.next-buffer
danprevious-buffer
solusi terbaik, terlepas dari pengikatan kunci tertentu. Karena itu komentar saya.Saya terkejut
iswitchb
belum ada yang disebutkan . Ini mungkin tidak sekuatido
, tetapi jauh sebelumido-mode
lahiriswitchb-mode
sudah standar untuk emacs, dan masih berguna saat ini. Untuk mencobanya cukup masukkanke dalam .emacs Anda atau aktifkan via
M-x iswitchb-mode
.sumber
iswitchb
sudah usang pada Emacs 24.4. Semua fungsinya tersedia melaluiido
sekarang.Gunakan helm-buffer-list atau helm-mini untuk secara visual memilih entri buffer dan pencocokan fuzzy. Itu dapat melakukan banyak hal di luar pergantian penyangga. Anda harus melihat demo di tautan.
sumber
Yang lain telah membahas paket yang berguna untuk membuat hidup lebih mudah sehubungan dengan penyangga / jendela / frame switching. (Saya pribadi menggunakan
helm
yang fenomenal.) Saya ingin membahas perubahan sederhana yang dapat membuat pengalaman Emacs lebih menyenangkan.Bagi saya, solusi untuk masalah buffer / frame saya (karena saya pikir
C-x o
yang terburuk) bukanlah paket; itu hanya:C-;
keother-window
(bersepeda melalui windows)C-'
keother-frame
(bersepeda melalui bingkai). Saya sebenarnya mulai menggunakan bingkai lebih banyak setelah menambahkan pintasan ini).help
jendela yang muncul (ketika membaca halaman manual, apropos, dll) dengan jendela apa pun yang sebelumnya terlihat).Saya juga berpikir saya akan berbagi beberapa pemikiran tentang ikatan kunci yang mungkin bermanfaat bagi pemula. (Maaf jika ini adalah tempat yang salah.) Saya tidak punya saran khusus tetapi, lebih tepatnya, "filosofi" yang memungkinkan saya mempertahankan serangkaian ikatan kunci yang efektif untuk diri saya sendiri.
Perintah yang jarang digunakan tidak layak untuk mengikat kunci dengan mudah.
keyfreq.el
dan lihat apa yang benar-benar Anda gunakan. Saya menggunakan metode survival-of-the-fittest untuk memutuskan perintah mana yang diberikan real estat paling berharga di keyboard saya.C-\
adalah cara pintas yang besar (untuk alasan yang dibahas di # 2) ... dan itu akan menjadi kejahatan untuk meninggalkan dipetakan ke perintah default:change-input-method
. (Mungkin sebagian dari Anda banyak menggunakannya, saya tentu saja tidak.)Faktor-faktor berikut menentukan kemudahan dan kecepatan pintasan keyboard (dimulai dengan yang paling penting):
Ctrl
,Meta
, dll). Sebagai contoh, itu jauh lebih cepat bagi saya untuk memukulC-c C-l C-p
daripada memukulC-x o
. Saya pribadi merasa sangat tidak nyaman harus mengangkatCtrl
kunci di antara sapuan kunci berurutan dari urutan kunci yang diberikan; jauh lebih mudah hanya dengan terus menumbuk tombol pengubah (dalam hal ini,Ctrl
). (Contoh khusus ini mungkin dipengaruhi oleh fakta bahwa saya telah memetakan ulangCtrl
kunci saya danCaps-Lock
kunci saya .)C-c C-l C-p
daripada memukulC-p C-' C-;
. (Cobalah dan itu harus jelas.) Secara umum, itu jauh lebih mudah untuk menggunakan urutan keystroke yang menggunakan bolak-balik tangan (atau, setidaknya, bolak-balik jari di tangan yang sama).Hanya beberapa pemikiran yang saya pikir mungkin bisa membantu pemula. Saya dapat menambahkan lagi nanti.
sumber
Saya menggunakan
windmove.el
danbs.el
untuk mengganti buffer dengan cepat. Kedua mode disertakan dengan Emacs.windmove.el
- beralih ke jendela (buffer yang saat ini ditampilkan) dalam arah yang ditentukan, mis. kiri, kanan, atas, bawah.bs.el
- Saya menggunakanbs-cycle-next
danbs-cycle-previous
untuk beralih ke buffer berikutnya yang saat ini tidak ditampilkan di jendela.Anda dapat men-setup windmove dengan
(windmove-default-keybindings)
yang akan mengikat perintah yang sesuai untukShift-Left Arrow
,Shift-Right Arrow
, dllUntuk pengaturan
bs.el
, sesuatu seperti ini akan berfungsi:sumber
windmove.el
ada di bawah halaman EmacsWiki "Switching Buffer", ditambahbs.el
beroperasi pada buffer, bukan jendela.Cara tercepat untuk mengganti buffer yang saya ketahui adalah dengan
ace-jump-buffer
. Satu stroke kunci membuka menu buffer dan kemudian pilih huruf di sebelah buffer yang Anda inginkanace-jump-line-mode
. Ini berfungsi paling baik untuk 26 atau lebih buffer terbaru. Untuk beralih ke buffer lebih jauh dalam riwayat penggunaan Anda,ido-switch-buffer
selalu merupakan pilihan yang baik.sumber
Saya lebih suka navigasi tab bergaya browser. Saya telah mengikat Ctrl + Tab dan Ctrl + Shift + Tab untuk masing-masing buffer berikutnya dan sebelumnya:
sumber
Secara luas, ada 2 cara untuk beralih buffer dan sebagian besar solusi akan jatuh ke salah satunya.
Inilah yang
C-x b
dilakukan secara default. Ido memberi Anda penyelesaian otomatis yang bagus sehingga Anda tidak perlu terlalu banyak TAB TAB. Proyek-proyek seperti helm, proyektil dll membuatnya lebih mudah dengan memberi Anda kemampuan untuk bekerja dengan file dalam proyek dll, dan bersama dengan ido, mereka bisa sangat berguna.Ini berguna ketika Anda memiliki begitu banyak buffer dan Anda ingin daftar semuanya. Anda dapat naik dan turun buffer, dan tekan enter untuk mengunjungi file tertentu. Ibuffer cukup bagus untuk itu.
Saya menggunakan keduanya dan ini adalah bagaimana Anda dapat mengaturnya.
sumber
Selain ido, saya memiliki pengaturan berikut.
Dalam kasus mode jahat, gunakan binding kunci berikut untuk mengganti buffer
Tetapkan nama buffer sebagai judul jendela. Ini akan membantu Anda saat bernavigasi dengan keybindings di atas
Jika Anda menggunakan mode jahat, Anda dapat mencoba
evil-leader
. Bind sering menggunakan kunci untuk pemimpin. misalnya Anda dapat mengikatC-x b
untuk<leader>-b
.Bind mode dired to
C-<f8>
. Sekarang ketika Anda ingin membuka file dalam direktori, tekanC-<f8>
, arahkan ke nama file & tekana
alih-alihRET
. Jadi buffer yang dired akan segera dibunuh.Gunakan
recentf
mode untuk menavigasi file terbaru.C-x C-r
Satu poin penting terakhir adalah - gunakan keyboard mekanis ergonomis. Jadi Anda dapat menekan tombol 'ctrl' dengan mudah dan cepat dengan pergelangan tangan alih-alih menyakiti kelingking.
Semoga ini bisa membantu seseorang.
sumber
Seperti yang dapat Anda lihat dari jawaban lain, ada banyak cara untuk merampingkan tugas khusus ini. Saya pribadi menggunakan Lusty Emacs sebagai perangkat switching buffer saya karena menangani penyelesaian fuzzy dengan cukup baik. Ini meminimalkan jumlah tombol-stroke yang diperlukan untuk memilih buffer baru, misalnya saya hanya perlu mengetikkan oxr untuk beralih ke ox-express.el , atau bahkan hanya putaran kedua kalinya karena melacak sejarah switch juga.
sumber
Jika Anda ingin terus menyikat buffer, tambahkan ini ke file init Anda:
Anda memang membutuhkan paket kunci-kunci dan Anda dapat mengubah kunci-kunci sesuai keinginan Anda, tetapi saya menemukan ikatan kunci ini menjadi yang paling nyaman. Sebelum menambahkan potongan ini, Anda harus meminta bind-key dengan,
sumber
Saya menggunakan C-Tab dan CS-Tab seperti aplikasi umum.
sumber
Ini bukan solusi yang sangat elegan (karena menggunakan makro alih-alih fungsi) dan tidak menjawab cara melompat ke buffer apa pun dengan cepat, tetapi hanya cara melompat ke buffer yang digunakan baru-baru ini. Tapi itu bekerja dengan sangat baik untuk saya:
Saya memiliki serangkaian makro yang digunakan
ido-switch-buffer
untuk melompat ke buffer sebelumnya, buffer sebelum itu, buffer sebelum itu, dll. Dan saya mengikat makro itu ke binding kunci yang menurut saya nyaman.Untuk melompat ke buffer terakhir:
Untuk melompat ke buffer kedua dari belakang:
Untuk melompat ke buffer antepenultimate:
Dll (Anda dapat beriklan sebanyak yang
?\C-n
Anda inginkan sejauh sejarah buffer yang dikunjungi seperti yang Anda inginkan).Ada fungsi bawaan untuk melompat ke buffer sebelumnya, tetapi keuntungan menggunakan makro
ido-switch-buffer
adalah Anda dapat menyesuaikan variabelido-ignore-buffers
untuk menghapus buffer khusus seperti*Messages*
atau*scratch*
dan buffer lain yang tidak diinginkan dari daftar. Dengan begitu, satu-satunya penyangga tempat Anda melompat adalah yang benar-benar Anda minati.sumber
Di VM saya, Cx ALT-RIGHT / LEFT terlalu lambat. Saya harus menunggu Cx untuk mendaftar di bilah status sebelum saya dapat melakukan hal lain. ditambah terlalu banyak kunci. Jadi saya memetakan C-TAB dan CM-TAB ke buffer selanjutnya dan seperti itulah yang saya lakukan di sebagian besar program windows. Mudah dilakukan dari dalam emacs:
M-x
membawa Anda ke bilah status. Kemudian ketikglobal-set-key
yang akan meminta Anda untuk urutan kunci yang ingin Anda ikat (C-TAB
) dan kemudian untuk perintah yang ingin Anda ikat ke (next-buffer
). Itu dia!sumber