โปรดพิจารณาโหมดอื่นM-x term
เช่นฉันทำสิ่งนี้เมื่อเกิดปัญหาในปี 2011 ฉันพยายามรวบรวมความพยายามทั้งหมดของ Inet ในเวลานั้นเพื่อให้เชลล์ทำงานร่วมกับ Bash เสร็จสิ้นรวมถึงคำถามนี้ด้วย แต่ตั้งแต่ค้นพบทางเลือกอื่นต่อหน้าterm-mode
ฉันก็ไม่อยากลองeshell
ด้วยซ้ำ
เป็นโปรแกรมจำลองเทอร์มินัลแบบเต็มดังนั้นคุณสามารถเรียกใช้โปรแกรมโต้ตอบภายในเช่นผู้บัญชาการเที่ยงคืน หรือเปลี่ยนไปใช้การzsh
ทำให้เสร็จสมบูรณ์เพื่อที่คุณจะได้ไม่เสียเวลาในการกำหนดค่า Emacs
คุณจะได้รับ TAB เสร็จสิ้นใน bash ฟรี แต่สิ่งที่สำคัญกว่าคุณจะได้รับพลัง Readline อย่างเต็มที่เช่นการค้นหาคำสั่งที่เพิ่มขึ้นหรือนำหน้า เพื่อให้การตั้งค่านี้การตรวจสอบที่สะดวกมากขึ้นฉัน.inputrc , .bashrc , .emacs
ส่วนสำคัญของ.inputrc
:
set editing-mode emacs
set input-meta on
set convert-meta off
set output-meta on
set match-hidden-files off
set completion-ignore-case on
set completion-query-items 100
set show-all-if-ambiguous on
set completion-prefix-display-length 1
set skip-completed-text off
set mark-directories on
set mark-symlinked-directories on
set visible-stats on
set horizontal-scroll-mode off
$if Bash
"\C-x\C-e": edit-and-execute-command
$endif
"\C-@": set-mark
"\C-w": kill-region
"\M-w": copy-region-as-kill
"\e[1;5C": forward-word
"\e[1;5D": backward-word
"\e[1;6C": forward-word
"\e[1;6D": backward-word
"\e[3;5~": kill-word
"\C-_": backward-kill-word
"\e[A": history-search-backward
"\C-p": history-search-backward
"\eOA": history-search-backward
"\e[B": history-search-forward
"\C-n": history-search-forward
"\eOB": history-search-forward
"\e[Z": complete
"\e[1;3C": menu-complete
"\e[1;3D": menu-complete-backward
"\e[1;5I": menu-complete
.bashrc
(ใช่! มีคำย่อใน Bash จากคำใดก็ได้ใน~/.bash_history
):
set -o emacs
if [[ $- == *i* ]]; then
bind '"\e/": dabbrev-expand'
bind '"\ee": edit-and-execute-command'
fi
.emacs
เพื่อให้การนำทางสะดวกสบายในบัฟเฟอร์ระยะ:
(setq term-buffer-maximum-size (lsh 1 14))
(eval-after-load 'term
'(progn
(defun my-term-send-delete-word-forward () (interactive) (term-send-raw-string "\ed"))
(defun my-term-send-delete-word-backward () (interactive) (term-send-raw-string "\e\C-h"))
(define-key term-raw-map [C-delete] 'my-term-send-delete-word-forward)
(define-key term-raw-map [C-backspace] 'my-term-send-delete-word-backward)
(defun my-term-send-forward-word () (interactive) (term-send-raw-string "\ef"))
(defun my-term-send-backward-word () (interactive) (term-send-raw-string "\eb"))
(define-key term-raw-map [C-left] 'my-term-send-backward-word)
(define-key term-raw-map [C-right] 'my-term-send-forward-word)
(defun my-term-send-m-right () (interactive) (term-send-raw-string "\e[1;3C"))
(defun my-term-send-m-left () (interactive) (term-send-raw-string "\e[1;3D"))
(define-key term-raw-map [M-right] 'my-term-send-m-right)
(define-key term-raw-map [M-left] 'my-term-send-m-left)
))
(defun my-term-mode-hook ()
(goto-address-mode 1))
(add-hook 'term-mode-hook #'my-term-mode-hook)
ตามคำสั่งC-x o
ทั่วไปที่ไม่ทำงานในโหมดจำลองเทอร์มินัลฉันขยายคีย์แมปด้วย:
(unless
(ignore-errors
(require 'ido)
(ido-mode 1)
(global-set-key [?\s-d] #'ido-dired)
(global-set-key [?\s-f] #'ido-find-file)
t)
(global-set-key [?\s-d] #'dired)
(global-set-key [?\s-f] #'find-file))
(defun my--kill-this-buffer-maybe-switch-to-next ()
"Kill current buffer. Switch to next buffer if previous command
was switching to next buffer or this command itself allowing
sequential closing of uninteresting buffers."
(interactive)
(let ( (cmd last-command) )
(kill-buffer (current-buffer))
(when (memq cmd (list 'next-buffer this-command))
(next-buffer))))
(global-set-key [s-delete] 'my--kill-this-buffer-maybe-switch-to-next)
(defun my--backward-other-window ()
(interactive)
(other-window -1))
(global-set-key [s-up] #'my--backward-other-window)
(global-set-key [s-down] #'other-window)
(global-set-key [s-tab] 'other-window)
โปรดทราบว่าฉันใช้super
คีย์ดังนั้นterm-raw-map
และอาจเป็นไปได้ว่าคีย์แมปอื่น ๆ จะไม่ขัดแย้งกับการผูกคีย์ของฉัน เพื่อสร้างsuper
คีย์จากด้านซ้ายWin
คีย์ฉันใช้.xmodmaprc
:
! To load this config run:
! $ xmodmap .xmodmaprc
! Win key.
clear mod3
clear mod4
keycode 133 = Super_L
keycode 134 = Hyper_R
add mod3 = Super_L
add mod4 = Hyper_R
คุณควรจำ 2 คำสั่ง: C-c C-j
- เพื่อเข้าสู่โหมดแก้ไข Emacs ปกติ (สำหรับการคัดลอกหรือ grepping ในข้อความบัฟเฟอร์) C-c C-k
- เพื่อกลับสู่โหมดจำลองเทอร์มินัล
การเลือกเมาส์และใช้Shift-Insert
งานxterm
ได้
eshell-mode
ที่มีแท็บเสร็จ ข้อมูลเพิ่มเติมที่นี่: masteringemacs.org/articles/2010/11/01/…