バニラEmacsでは、C-x b
切り替えるためにバッファ名を手動で入力する必要があります。バッファーの名前を忘れた場合、ヒットTAB
候補をリストするためにヒットする必要があります。このプロセスを高速化するためにできることはありますか?
C-x C-<left/right>
バッファをすばやく切り替えるために使用するのが好きです。「さらに」バッファに切り替える必要があるときは、を使用しますIBuffer
。
バニラEmacsでは、C-x b
切り替えるためにバッファ名を手動で入力する必要があります。バッファーの名前を忘れた場合、ヒットTAB
候補をリストするためにヒットする必要があります。このプロセスを高速化するためにできることはありますか?
C-x C-<left/right>
バッファをすばやく切り替えるために使用するのが好きです。「さらに」バッファに切り替える必要があるときは、を使用しますIBuffer
。
回答:
ありIDOのに役立つはずモード。
編集:
これをinitファイルに入れて、デフォルトでidoモードを有効にします:
(ido-mode 1)
これで、C-x b
候補者のリストが表示されます。
アイテムを縦に表示したい場合は、これを初期化ファイルに追加します。
(setq ido-separator "\n")
エルゴマックスの礼儀
また、前/次のバッファーへの切り替えについて話しているこの投稿をお勧めします。
私は最近使用し始めましたC-x <left>
とC-x <right>
。これらは両方とも標準のEmacsバインディングであり、構成するものはありません。Leftは前のバッファー(最初は)と同じC-x b RET
に戻りますが、もう一度実行すると3番目に最近アクセスしたバッファーに戻ります。3つまたは4つのバッファ間を頻繁に飛び回っている場合、バッファ名を覚えようとするよりもはるかに簡単です。
また、私はちょうど発見C-x C-<left>
し、C-x C-<right>
あなただけのバッファを介して反転し、xと矢印の間の制御キーと代替を押したままにできるように、同じ機能にバインドされています。かなりいい!
Helmを使用できます。
私の設定では、に切り替えC-x b
ましたM-l
。これhelm-buffers-list
により、少なくとも私にとってはプロセスが非常に高速になります。
ido
かiswitchb
またはicicles
、そのようなものが、それらは基本的にヘルムによって廃止されています。ええ、ace-jump-buffer
かっこいいですが、ヘルムほど速くはありません。押すべきキーを知る前に、リストでバッファを見つける必要があるからです。Helmを使用すると、既に知っているいくつかのキーストローク(バッファーの名前など)でリストを絞り込むことができます。私はC-TAB
、バッファの切り替え、最近のファイル、ブックマークなどの読み込みに使用しています。高速なものはありません。
helm
。しかし、私は使用して好むhelm-mini
もあなたを示している、Recentf
とhelm-buffers-list
。
ivy-switch-buffer
。
すでに述べたIdoで使用する調整を追加するだけです。
(require 'ido)
(require 'ido-hacks)
(require 'flx-ido)
(require 'ido-vertical-mode)
(ido-mode 1)
(flx-ido-mode 1)
(ido-hacks-mode 1)
(ido-everywhere 1)
(ido-vertical-mode 1)
(setq ido-enable-flex-matching t
ido-use-filename-at-point 'guess
ido-vertical-define-keys 'C-n-C-p-up-down-left-right))
また、表示されているウィンドウ間をジャンプace-window
するace-jump-mode
ために、バッファを切り替えるためにも使用しています。慣れてきましたが試してみる価値があります。
私はそれを組み合わせて、クイックジャンプのためにkey-chord-mode
ヒットしso
ました:
(key-chord-define-global "so" 'ace-window)
上記のパッケージはすべて、Melpaのパッケージマネージャーから入手できます。
use-package
ましrequire
た。この例では、ユーザーが追加のパッケージをインストールしてそのソリューションを実装する必要は特にありません。
@kuanyuiは、コメントで言うようにnext-buffer
&previous-buffer
あなたが間のサイクルにわずか数のバッファを持っている場合、非常に迅速です。(数個以上、およびより多くのバッファ選択機能のために、私は使用しますicicle-buffer
。)
ただし、デフォルトでは、next-buffer
とprevious-buffer
、プレフィックスキーの上にありますC-x
。
それはそれらが再現できないことを意味します:あなたはただ打つことができませんC-x <right> <right> <right>...
。代わりに、これらのコマンドを異なる反復可能なキーにバインドするかC-x <right> C-x <right> C-x <right>...
、非常に高速ではないを使用する必要があります。
これらのコマンドの繰り返し可能なバージョンの場合、ライブラリmisc-cmds.el
をロードし、バニラの繰り返し不可能なバージョンをそこで定義された繰り返し可能なバージョンに再マップします。
(global-set-key [remap previous-buffer] 'previous-buffer-repeat)
(global-set-key [remap next-buffer] 'next-buffer-repeat)
(同様に、同じライブラリundo
では、プレフィックスキー上であっても繰り返し可能なバージョンが見つかりますundo-repeat
。
ところで、あなたはかなり作ることができます任意の(でも、プレフィックスキー上)、反復コマンド、関数を使用してrepeat-command
(からmisc-cmds.el
)。繰り返し可能なバージョンの定義に必要なのはこれだけですnext-buffer
:
(defun previous-buffer-repeat ()
"Switch to the previous buffer in the selected window.
You can repeat this by hitting the last key again..."
(interactive)
(require 'repeat nil t) ; Library `repeat.el' is in Emacs 22.1 and later
(repeat-command 'next-buffer))
C-,
し、C-.
再現性を得るために、あなたはとにかくそれにしている一方で、設定C-x.
とC-x,
するother-window
と(lambda()(interactive)(other-window -1))
。サイクリングウィンドウはおそらく再現性の必要性が低く、余分なパッケージなしで1分で脱出できます。
next-buffer
とprevious-buffer
最適なソリューションを見つけました。したがって、私のコメント。
誰もiswitchb
まだ言及していないことに驚いています。それはのように強力ではないかもしれませんが、生まれるido
ずっと前にすでにemacsの標準であり、今日でもまだ有用です。試してみるだけでido-mode
iswitchb-mode
(iswitchb-mode 1)
.emacsに入力するか、でアクティブにしM-x iswitchb-mode
ます。
iswitchb
Emacs 24.4で廃止されました。その機能はすべて、ido
今から利用できます。
helm-buffer-listまたはhelm-miniを使用して、バッファエントリとファジーマッチングを視覚的に選択します。バッファの切り替え以外にも多くのことができます。リンクにデモが表示されます。
他の人は、バッファ/ウィンドウ/フレームの切り替えに関して、生活を楽にするのに役立つパッケージについて議論しています。(私は個人的にhelm
驚異的です。)より楽しいEmacsエクスペリエンスを実現できる、より簡単な変更について説明したいと思います。
私にとって、バッファ/フレームの問題の解決策C-x o
は(最悪だと思うので)パッケージではありませんでした。それは単に:
C-;
へother-window
(窓からサイクリング)C-'
にother-frame
(フレームを介してサイクリング)。このショートカットを追加した後、実際にフレームの使用を開始しました)。help
ポップアップするウィンドウを置き換えるのに最適です)(manページやaproposなどを読むとき)以前に表示されていたウィンドウで。また、初心者が役立つと思われるキーバインディングに関するいくつかの考えを共有したいと思いました。(これが間違った場所である場合はごめんなさい。)具体的な提案はありませんが、むしろ、自分のために効果的なキーバインドのセットを維持できる「哲学」です。
頻繁に使用されないコマンドは、簡単なキー割り当てに値しません。
keyfreq.el
あなたが本当にたくさん使っているものをダウンロードして見てください。私は、どのコマンドが私のキーボードで最も価値のある不動産を授与されるかを決定するために、生存の最適な方法を使用します。C-\
そのデフォルトのコマンドにマッピングされ(#2で述べた理由から)素晴らしいショートカットがある...そして、それを残すことは犯罪になります:change-input-method
。(多分あなたはそれをたくさん使うでしょう、私は確かにそうしません。)次の要因により、キーボードショートカットの使いやすさと速度が決まります(最も重要なものから開始)。
Ctrl
、Meta
など、)。たとえば、私がヒットするC-c C-l C-p
よりも、ヒットする方がはるかに高速ですC-x o
。個人的にCtrl
は、特定のキーシーケンスの連続するキーストロークの間にキーを離す必要があるのは非常に不便です。修飾ボタン(この場合はCtrl
)を押し続けるだけで簡単になります。(この特定の例は、Ctrl
キーとキーを再マップしたという事実に影響される可能性がありCaps-Lock
ます。)C-c C-l C-p
よりもヒットする方がずっと速いですC-p C-' C-;
。(試してみれば明らかです。)一般的に言えば、交互の手(または、少なくとも同じ手の交互の指)を使用するキーストロークシーケンスを使用する方がはるかに簡単です。 私が初心者に役立つかもしれないと思ったほんのいくつかの考え。後でさらに追加することがあります。
を使用してwindmove.el
、bs.el
バッファをすばやく切り替えます。両方のモードはEmacsに含まれています。
windmove.el
- 指定された方向(左、右、上、下など)のウィンドウ(現在表示されているバッファー)に切り替えます。
bs.el
-を使用してbs-cycle-next
、bs-cycle-previous
現在ウィンドウに表示されていない次のバッファに切り替えます。
あなたと一緒にすることができ、セットアップwindmove (windmove-default-keybindings)
に適切なコマンドをバインドするShift-Left Arrow
、Shift-Right Arrow
など、
を設定するにはbs.el
、次のように機能します。
(global-set-key [(f9)] 'bs-cycle-previous)
(global-set-key [(f10)] 'bs-cycle-next)
windmove.el
EmacsWikiページの「バッファの切り替え」の下にあり、さらにbs.el
ウィンドウではなくバッファで動作します。
私が知っているバッファを切り替える最も速い方法はですace-jump-buffer
。1回のキーストロークでバッファメニューが開き、必要なバッファの横にある文字を選択しますace-jump-line-mode
。これは、26個ほどの最新のバッファーに最適です。使用履歴をさかのぼってバッファに切り替えるにido-switch-buffer
は、常に適切な選択です。
大まかに言って、バッファを切り替えるには2つの方法があり、ほとんどのソリューションはこれらのいずれかに該当します。
これはC-x b
デフォルトで行われることです。Idoは自動補完を提供するので、TAB TAB TABをそれほど必要としません。helm、projectileなどのプロジェクトは、プロジェクト内のファイルを操作する機能を提供することで簡単になり、idoと一緒に使用すると非常に便利です。
これは、非常に多くのバッファがあり、それらすべてのリストが必要な場合に便利です。バッファを上下に移動し、Enterキーを押して特定のファイルにアクセスできます。Ibufferはそのためにかなり適しています。
私は両方を使用し、これがあなたがそれを設定する方法です。
(global-set-key (kbd "C-x C-b") 'ido-switch-buffer)
(global-set-key (kbd "C-x b") 'ibuffer)`
idoに加えて、次のセットアップがあります。
悪モードの場合、次のキーバインディングを使用してバッファを切り替えます
(define-key evil-normal-state-map (kbd "C-j") 'next-buffer)
(define-key evil-normal-state-map (kbd "C-k") 'previous-buffer)
(define-key evil-normal-state-map (kbd "C-S-h") 'evil-window-left)
(define-key evil-normal-state-map (kbd "C-S-j") 'evil-window-down)
(define-key evil-normal-state-map (kbd "C-S-k") 'evil-window-up)
(define-key evil-normal-state-map (kbd "C-S-l") 'evil-window-right)
ウィンドウのタイトルとしてバッファ名を設定します。これは、上記のキーバインドでナビゲートするときに役立ちます
(setq frame-title-format "%b")
悪モードを使用している場合は、を試すことができますevil-leader
。頻繁に使用するキーをリーダーにバインドします。例えばあなたはバインドできますC-x b
し<leader>-b
。
(global-evil-leader-mode)
(evil-leader/set-leader ",")
(evil-leader/set-key
"b" 'switch-to-buffer)
diredモードをにバインドしますC-<f8>
。ここで、ディレクトリ内のファイルを開きたい場合、を押しC-<f8>
、ファイル名に移動してのa
代わりにを押しますRET
。したがって、diredバッファーはすぐに削除されます。
(global-set-key (kbd "C-<f8>")
(lambda ()
(interactive)
(dired default-directory)))
(put 'dired-find-alternate-file 'disabled nil)
recentf
モードを使用して、最近のファイルをナビゲートします。C-x C-r
最後の重要なポイントは、人間工学に基づいたメカニカルキーボードを使用することです。したがって、ピンキーを傷つける代わりに、手首で「ctrl」キーを簡単かつ迅速に押すことができます。
これが誰かを助けるかもしれないことを願っています。
他の回答からわかるように、この特定のタスクを合理化する多くの方法があります。私は個人的にバッファスイッチング装置としてLusty Emacsを使用します。ファジーな補完を非常にうまく処理できるからです。これにより、新しいバッファーを選択するために必要なキーストロークの数が最小限に抑えられます。たとえば、ox-reveal.elに切り替えるにはoxrと入力するだけでよく、スイッチの履歴も追跡するため、2回目でも必要です。
バッファをブラッシングし続けたいだけなら、これをinitファイルに追加してください:
(bind-key* "M-l" 'next-buffer)
(bind-key* "M-k" 'previous-buffer)
bind-keyパッケージが必要であり、キーバインディングを希望に合わせて変更できますが、これらのキーバインディングが最も快適であることがわかりました。このスニペットを追加する前に、バインドキーを要求する必要があります。
(require 'bind-key)
一般的なアプリケーションのようにC-TabとCS-Tabを使用しています。
(defun change-buffer-until-normal (change-fn)
(let (current (buffer-name))
(funcall change-fn)
(while (and (string-prefix-p "*" (buffer-name))
(not (eq current (buffer-name))))
(funcall change-fn))))
(defun my-next-buffer ()
(interactive)
(change-buffer-until-normal 'next-buffer))
(defun my-prev-buffer ()
(interactive)
(change-buffer-until-normal 'previous-buffer))
(global-set-key [C-tab] 'my-next-buffer)
(global-set-key [C-S-iso-lefttab] 'my-prev-buffer)
これは非常にエレガントなソリューションではありません(それは代わりに関数のマクロを使用するため)、それがにジャンプする方法応答しない任意の迅速バッファが、最近使用されたバッファへジャンプするだけか。しかし、それは私にとって非常にうまくいきます:
ido-switch-buffer
前のバッファー、その前のバッファー、その前のバッファーなどにジャンプするために使用する一連のマクロがあります。また、便利なキーバインドにこれらのマクロをバインドしました。
最後のバッファーにジャンプするには:
(fset 'my-goto-previous-buffer
[?\C-x ?b return])
最後から2番目のバッファーにジャンプするには:
(fset 'my-goto-previous-buffer
[?\C-x ?b ?\C-n return])
最後から2番目のバッファーにジャンプするには:
(fset 'my-goto-previous-buffer
[?\C-x ?b ?\C-n ?\C-n return])
等(?\C-n
訪問したバッファの履歴を好きなだけ遡って広告することができます)。
そこ前のバッファにジャンプする組み込み関数ですが、でマクロを使用する利点はido-switch-buffer
、あなたが変数をカスタマイズできることであるido-ignore-buffers
ような特殊なバッファ削除する*Messages*
か*scratch*
、リストから他の不要なバッファを。このように、ジャンプ先のバッファは、実際にジャンプしたいバッファだけです。
私のVMでは、Cx ALT-RIGHT / LEFTが遅すぎます。Cxがステータスバーに登録されるのを待たないと、他に何もできません。さらに、キーが多すぎます。だから私はC-TABとCM-TABをnextバッファーとprevバッファーにマッピングしました。これはとにかくほとんどのWindowsプログラムで行うことです。emacs内から簡単に実行でき
M-x
ます。ステータスバーに移動します。次にglobal-set-key
、バインドするキーシーケンスの入力を求めるプロンプトを入力し(C-TAB
)、バインドするコマンドの入力を求めます(next-buffer
)。それでおしまい!