Bagaimana cara beralih antar windows dengan cepat?
Saya sering memiliki beberapa jendela terbuka dan perlu beralih di antara mereka. Saat ini, saya menggunakan C-x o
untuk mendapatkan yang saya inginkan. Apakah ada alur kerja yang lebih efisien yang tersedia untuk ini?
window
cycling
navigation
Sibi
sumber
sumber
Jawaban:
Saya jelas lebih suka jendela as untuk ini. Anda dapat beralih antara jendela dan bingkai yang terlihat. Ada dalam MELPA, Anda dapat menginstalnya dengan cepat. Satu-satunya yang tersisa untuk dilakukan adalah mengikatnya:
Atau mungkin menggunakan kunci nada yang lebih pendek, karena beralih windows adalah tugas yang umum:
Ringkasan dari
ace-window
Ini pengganti pengganti untuk
other-window
. Berbeda dengan yang terakhir, Anda tidak perlu meneleponace-window
dua kali atau lebih untuk memilih jendela: Anda memilih jendela yang Anda inginkan dalam satu panggilan (mungkin di beberapa frame).Selain beralih windows,
ace-window
dapat melakukan lebih banyak (menghapus atau menukar windows, dll), lihat README .sumber
ace-window
dan kemudian melihatswitch-window
yang tampaknya melakukan hal yang kira-kira sama, kecuali bahwa huruf-hurufnya lebih jelas. sepertinya lucu kami memiliki kedua paket.switch-window
sampai saya mengajukanace-window
ke MELPA.ace-window
, itu memiliki lebih banyak kustomisasi daripada paket lain saya kira. Masih ada yang bisa membantu di masa depan adalah kunci yang mengikat fungsi yang akan mirip dengan tindakan pertukaran pintar tetapi memakan jendela yang menghasilkan jendela yang lebih besar pada titik dan lebih kecil dalam ukuran jendela yang dipilih (dimakan jendela atas). Rasio harus ditentukan dalam hal ini sebagai setengah, seperempat, atau sepertiga mungkin.Salah satu caranya adalah menggunakan
windmove
. Dengan ikatan kunci default, ini memungkinkan beralih ke jendela di sebelah yang aktif saat ini.Itu dibangun di Emacs, jadi tidak perlu menginstal apa pun; cukup aktifkan dengan pengaturan minimal berikut di file init Anda:
Anda kemudian dapat beralih ke tetangga jendela menggunakan tombol berikut (di mana panah digunakan secara intuitif mendefinisikan arah di mana Anda bergerak):
S-<left>
,S-<right>
,S-<up>
,S-<down>
.Jika Anda lebih suka menggunakan pengubah lain shift, Anda bisa memberikannya sebagai argumen
windmove-default-keybindings
. Sebagai contoh:atau
Info lebih lanjut di Emacs Wiki .
sumber
(windmove-default-keybindings 'meta)
seperti yang disarankan pada EmacsWiki.Shift-arrow
) , tetapi ketika Anda memiliki monitor besar dengan banyak split, gerakan seperti itu dengan cepat menjadi berat. Akan lebih menarik untuk entah bagaimana menghitung windows / splits. Sukaace-window
, tetapi dengan penekanan tombol lebih sedikit, dan algoritma yang jelas untuk segera mencari tahu nomor yang Anda inginkan.Anda dapat mengikat
other-window
ke urutan tombol yang lebih mudah diketik.Misalnya, saya
C-.
terikatother-window
, danC-,
terikat untuk pergi ke jendela sebelumnya.Ini sangat berguna untuk memindahkan banyak jendela; setelah Anda menahan Kontrol, Anda hanya perlu menekan satu tombol untuk pindah ke jendela berikutnya. Ini jauh lebih mudah daripada tiga kali penekanan tombol per gerakan.
sumber
C-x o
untukother-window
adalah salah satu dari beberapa pesaing kuat untuk judul "pintasan standar emacs terburuk". Solusi saya (mirip dengan Zck) adalah untuk rebindother window
ke urutan kunci (cara) yang lebih mudah - saya memilikinya terikatC-;
(dan sayaCaps-Lock
bertukar denganCtrl
sehingga yang diperlukan hanyalah ketukan cepat dari kelingking). Btw, saya benar-benar bergantung pada fitur tertentuhelm
danicicles
(yaitu, saya bukan "anti-paket" atau apa pun); Saya hanya berpikir bahwa solusi sederhana berfungsi paling baik di sini.M-o
untukother-window
. Beberapa mode sudahM-o
mengikat, terutamadiff-mode
,ggtag-mode
, danibuffer-mode
. Anda harus melepaskannya secara manual di setiap mode peta.unbind-key
disediakan olehbind-key.el
sangat berguna.M-o
juga, danM-O
terikatace-window
ketika saya membutuhkan kekuatan tambahan.window-numbering.el!
Saya menetapkan hotkey ", 1", ", 2", ", 3" untuk mengganti jendela tertentu (harap dicatat saya menggunakan mode jahat)
selain itu, saya menampilkan nomor jendela di baris mode dalam warna PINK, bergaris bawah.
Ini adalah petunjuk visual yang tidak dapat Anda abaikan,
Itu cara tercepat untuk beralih jendela.
periksa https://github.com/redguardtoo/emacs.d/blob/master/lisp/init-evil.el dan https://github.com/redguardtoo/emacs.d/blob/master/lisp/init-modeline .el untuk pengaturan saya.
Sylvain Benner mengadopsi ide saya di ruang angkasa tetapi ikatan kunci berbeda . Jadi, jika Anda menggunakan spacemacs, Anda mendapatkan solusi tercepat di luar kotak.
sumber
window-number
denganM-<num>
untuk dengan cepat beralih b / w windows. Konsep yang mirip dengan yang satu iniTanpa menggunakan tambahan apa pun, Anda dapat terus menggunakan
C-x o
awalan opsional untuk melewati banyak jendela itu. Misalnya:C-u 1 C-x o
akan pergi ke jendela berikutnya dalam urutan (yaitu, apa yang akan Anda dapatkan dengan polosC-x o
),C-u 2 C-x o
berjalan dua jendela,C-u 3 C-x o
berjalan tiga jendela, dan seterusnya.Kutipan dari
other-window
docstring (fungsi yang dipanggil olehC-x o
:sumber
Beberapa orang mungkin ingat editor Brief (cukup lucu diproduksi oleh perusahaan bernama Underware).
Itu memiliki cara yang rapi untuk beralih di antara jendela yang terlihat. M-panah akan memindahkan kursor ke jendela secara langsung sejalan dengan arah tombol panah.
Jadi, saya memetakan
winmove-left
,winmove-right
,winmove-up
danwinmove-down
fungsi untukM-left
,M-right
,M-up
danM-down
kunci sebagai berikut dalam file Emacs saya -Sekarang saya dapat bergerak dengan mudah di antara windows, terlepas dari seberapa berantakan saya memiliki konfigurasi ... Dan itu bisa sangat berantakan dengan ukuran tampilan saat ini ...
sumber
(windmove-default-keybindings 'meta)
!Jika Anda menggunakan Icicles maka
C-x o
Anda dapat memilih windows berdasarkan nama (atau dengan bersepeda).Tanpa arg awalan,
C-x o
sama seperti biasaother-window
, kecuali jika bingkai hanya memiliki satu jendela, dalam hal iniother-frame
.Dengan awalan arg,
C-x o
adalah multi-perintah yang memungkinkan Anda menavigasi antara jendela atau bingkai dengan nama (atau dengan bersepeda). Menavigasi antar windows menggunakan multi-perintahicicle-select-window
; menavigasi di antara penggunaan frameicicle-select-frame
.Navigasi mana yang digunakan tergantung pada awalan arg:
Zero prefix arg (eg
C-0
): Jika bingkai yang dipilih memiliki banyak jendela, maka ini adalahicicle-select-window
, dengan jendela dalam bingkai yang sama dengan kandidat. Kalau tidak (bingkai satu jendela), iniicicle-select-frame
.C-u
: Jika bingkai yang dipilih memiliki beberapa jendela, maka ini adalahicicle-select-window
, dengan jendela dari semua bingkai yang terlihat sebagai kandidat. Kalau tidak, iniicicle-select-frame
.C-u C-u
:icicle-select-window
, dengan jendela dari semua bingkai sebagai kandidat (termasuk bingkai yang ditandai atau disembunyikan).Seperti biasa di Icicles , Anda dapat menggabungkan (a) penyelesaian , mengetik teks untuk mempersempit kumpulan kandidat yang cocok (dalam jendela atau nama bingkai, dalam hal ini), dengan (b) bersepeda (di antara kandidat yang cocok).
sumber
Pertimbangkan untuk menggunakan kunci-kunci untuk melompat cepat di antara jendela. Saya merasa jauh lebih cepat daripada meraih kunci pengubah (dan juga mengurangi ketegangan di tangan saya).
Paket pilihan saya untuk digunakan adalah
ace-window
, yang memungkinkan Anda menavigasi beberapa jendela lebih mudah daripada sekadarother-window
.Jelas untuk menggunakan ini yang Anda butuhkan
key-chord
danace-window
, keduanya tersedia dalam melpa.sumber
ace-window
melakukan pekerjaan seperti pada jawaban @ abo-abo. Itu mengejutkan saya bahwa, dalam konteks ini, ikatan kunci spesifik untuk digunakan akan lebih masuk akal sebagai komentar daripada jawaban. Hanya dua sen saya.key-chord
mengikat kombinasi tombol yang sangat mudah diakses. Pengikatan contohxo
lebih cepat dariC-x o
(kedalaman satu lawan dua). Jawaban ini dapat disusun ulang untuk menekankan bahwa jawabannya ortogonal dengan jawaban lain tentang pemilihan fungsi (danace-window
hanya salah satu dari banyak pilihan yang dapat diikat dengan cara yang dijelaskan). Simpan jawaban ini sebagai berbeda!Beberapa jawaban yang bagus di sini, saya juga penggemar WinMove, tapi saya ikat ke C- karena org-mode menggunakan M- untuk memanipulasi heading
Di mana itu menjadi sangat baik adalah jika Anda menggabungkannya dengan Hydra . Mengikuti contoh di wiki mereka, saya membuat monster saya sendiri:
Ini memungkinkan saya mengubah jendela, mengubah ukurannya, memindahkan buffer dari jendela ke jendela, buffer siklus, membunuh buffer dan bahkan membatalkan konfigurasi jendela melalui mode pemenang, dan juga mengintegrasikan helm. Untuk keluar dari hydra, cukup tekan panah atau tombol lain yang tidak ada di hydra. Anda dapat menemukan fungsi "hydra-move" pada contoh hydra Hal yang hebat tentang hydra adalah saya tidak harus mengingat semua keybindings dan "modeful" -nya, jadi begitu Anda berada di hydra semuanya tersedia sebagai satu kunci tekan.
sumber
(windmove-default-keybindings 'control)
.Jika Anda menggunakan
evil-mode
, Anda bisa menggunakan awalan angka denganC-w C-w
(evil-window-next
) untuk memilih jendela yang Anda inginkan. Jadi:1 C-w C-w
ambil jendela pertama dalam urutan siklik,3 C-w C-w
pilih jendela ketiga dalam urutan siklik, dan sebagainya.sumber
Ace Jump memungkinkan Anda menavigasi penunjuk ke semua kata di layar, terlepas dari apa jendela atau bingkai mereka, sehingga tidak begitu berbeda dari menggunakan Ace Window atau Switch Window.
Sebuah keuntungan bisa jadi ketika melompat windows Anda juga dapat menempatkan pointer Anda dengan presisi.
Saya masih merasa sedikit rumit atau mengganggu, dan menemukan saya menggunakan
windmove
lebih banyak, karena sangat sederhana, tetapi masih menggunakan Ace Jump ketika saya membaca di jendela atau bingkai lain dan ingin pindah ke tempat di sana.sumber
Seperti biasa ada seratus cara berbeda untuk mencapai ini. Cara pilihan saya adalah menggunakan NumberedWindows . Saya kemudian mengatur keybind berikut menggunakan Super dan tombol 1-9.
Saya masuk ke sedikit lebih detail pada subjek yang tepat ini dengan posting saya baru-baru ini yang dapat Anda baca di Afternoon Coder .
sumber
Anda juga dapat memutuskan untuk menggunakan switch-window sebagai pengganti visual
C-x o
sumber
switch-window
yang lainnya?