바닐라 이맥스에서는 C-x b
전환하기 위해 버퍼 이름을 수동으로 입력해야합니다. 버퍼 이름을 잊어 버린 경우 TAB
가능한 완성을 나열 하기 위해 적중 해야합니다. 이 과정을 더 빨리하기 위해 할 수있는 일이 있습니까?
C-x C-<left/right>
버퍼를 빠르게 전환 하는 데 사용하는 것이 좋습니다. "먼"버퍼로 전환해야 할 때 사용 IBuffer
합니다.
바닐라 이맥스에서는 C-x b
전환하기 위해 버퍼 이름을 수동으로 입력해야합니다. 버퍼 이름을 잊어 버린 경우 TAB
가능한 완성을 나열 하기 위해 적중 해야합니다. 이 과정을 더 빨리하기 위해 할 수있는 일이 있습니까?
C-x C-<left/right>
버퍼를 빠르게 전환 하는 데 사용하는 것이 좋습니다. "먼"버퍼로 전환해야 할 때 사용 IBuffer
합니다.
답변:
이 이도의 도움이 모드는.
편집하다:
이것을 init 파일에 넣으면 기본적으로 ido 모드가 활성화됩니다.
(ido-mode 1)
이제 C-x b
후보 목록을 보여 드리겠습니다.
항목을 세로로 표시하려는 경우 이것을 init 파일에 넣으십시오.
(setq ido-separator "\n")
인체 공학적 의례
이 게시물 에서 이전 / 다음 버퍼로의 전환에 대해 이야기하도록 제안하겠습니다 .
최근에 C-x <left>
and를 사용하기 시작했습니다 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만큼 빠르지는 않습니다. 누를 키를 알기 전에 목록에서 버퍼를 찾아야하기 때문입니다. 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
있습니다.
BTW에서는 (from ) 함수를 사용하여 거의 모든 명령을 반복 가능 하게 만들 수 있습니다 (접두사 키조차도 ). 이것이 반복 가능한 버전을 정의하는 데 필요한 전부입니다 .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
하지는 않지만 이미 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
팝업 되는 창 을 대체하기에 좋습니다) (이전에 표시된 창으로 맨 페이지, 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
. 키를 한 번 누르면 버퍼 메뉴가 열리고 원하는 버퍼 옆에있는 문자를 선택하십시오 ace-jump-line-mode
. 이것은 26 개 이상의 최신 버퍼에 가장 적합합니다. 사용 내역에서 더 멀리 버퍼로 전환하려면 ido-switch-buffer
항상 좋은 선택입니다.
일반적으로 버퍼를 전환하는 두 가지 방법이 있으며 대부분의 솔루션은이 중 하나에 속합니다.
이것이 C-x b
기본적으로하는 일입니다. Ido는 자동 완성 기능을 제공하므로 TAB TAB을 너무 많이 탭할 필요가 없습니다. 조타 장치, 발사체 등의 프로젝트는 프로젝트 등의 파일로 작업 할 수있는 기능을 제공하여 쉽게 만들 수 있으며 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
. 따라서 폐기 된 버퍼는 즉시 종료됩니다.
(global-set-key (kbd "C-<f8>")
(lambda ()
(interactive)
(dired default-directory)))
(put 'dired-find-alternate-file 'disabled nil)
사용 recentf
최근 파일을 탐색 모드.C-x C-r
마지막으로 중요한 점은 인체 공학적 기계식 키보드를 사용하는 것입니다. 따라서 새끼 손가락을 다치게하지 않고 손목으로 'Ctrl'키를 쉽고 빠르게 누를 수 있습니다.
이것이 누군가를 도울 수 있기를 바랍니다.
버퍼를 계속 닦으려면 init 파일에 추가하십시오.
(bind-key* "M-l" 'next-buffer)
(bind-key* "M-k" 'previous-buffer)
바인드 키 패키지 가 필요하며 키 바인딩을 원하는대로 변경할 수 있지만 이러한 키 바인딩이 가장 편합니다. 이 스 니펫을 추가하기 전에 다음을 수행하여 바인드 키가 필요합니다.
(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])
두 번째 버퍼로 이동하려면
(fset 'my-goto-previous-buffer
[?\C-x ?b ?\C-n return])
최종 버퍼로 이동하려면 다음을 수행하십시오.
(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를 다음 버퍼와 이전 버퍼에 매핑했습니다. 그것이 대부분의 Windows 프로그램에서하는 일입니다. emacs에서 쉽게 할 수 있습니다 : M-x
상태 표시 줄로 이동
합니다. 그런 다음 global-set-key
바인딩하려는 키 시퀀스 ( C-TAB
) 를 입력 하라는 메시지를 표시 한 다음 키를 바인딩 하려는 명령 ( ) 을 입력 하라는 메시지가 표시됩니다 next-buffer
. 그게 다야!