⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vi.el

📁 早期freebsd实现
💻 EL
📖 第 1 页 / 共 4 页
字号:
; Evi: Major mode for emulating "vi" editor under GNU Emacs.; Originally written by : seismo!wucs!nz@rsch.wisc.edu (Neal Ziring); Extensively redesigned and rewritten by wu@crys.wisc.edu (Felix S.T. Wu); Last revision: 01/07/87 Wed (for GNU Emacs 18.33);; INSTALLATION PROCEDURE:; 1) Add a global key binding for command "vi-mode" (I use ESC ESC instead of;    the single ESC used in real "vi", so I can access other ESC prefixed emacs;    commands while I'm in "vi"), say, by putting the following line in your;    ".emacs" file:;    (define-key global-map "\e\e" 'vi-mode) ;quick switch into vi-mode; 2) If you wish you can define "find-file-hooks" to enter "vi" automatically;    after a file is loaded into the buffer. For example, I defined it as:;    (setq find-file-hooks (list;                            (function (lambda ();                                (if (not (or (eq major-mode 'Info-mode);	                                      (eq major-mode 'vi-mode)));                                    (vi-mode)))))); 3) In your .emacs file you can define the command "vi-mode" to be "autoload";    or you can execute the "load" command to load "vi" directly.; 4) Read the comments for command "vi-mode" before you start using it.   ;; COULD DO; 1). A general 'define-operator' function to replace current hack; 2). In operator handling, should allow other point moving Emacs commands;     (such as ESC <, ESC >) to be used as arguments.;(defun vi-switch-mode (arg mode-char)  "Switch the major mode of current buffer as specified by the following char \\{vi-tilde-map}"  (interactive "P\nc")  (let ((mode-cmd (lookup-key vi-tilde-map (char-to-string mode-char))))    (if (null mode-cmd)	(with-output-to-temp-buffer "*Help*"	  (princ (substitute-command-keys "Possible major modes to switch to: \\{vi-tilde-map}")))      (setq prefix-arg arg)		; prefix arg will be passed down      (command-execute mode-cmd nil)	; may need to save mode-line-format etc      (set-buffer-modified-p (buffer-modified-p))))) ; just in case(if (null (where-is-internal 'vi-switch-mode (current-local-map)))    (define-key ctl-x-map "~" 'vi-switch-mode))(defvar vi-tilde-map nil  "Keymap used for \\[vi-switch-mode] prefix key.  Link to various major modes.")(if vi-tilde-map    nil  (setq vi-tilde-map (make-keymap))  (define-key vi-tilde-map "a" 'abbrev-mode)  (define-key vi-tilde-map "c" 'c-mode)  (define-key vi-tilde-map "d" 'vi-debugging)  (define-key vi-tilde-map "e" 'emacs-lisp-mode)  (define-key vi-tilde-map "f" 'auto-fill-mode)  (define-key vi-tilde-map "g" 'prolog-mode)  (define-key vi-tilde-map "h" 'hanoi)  (define-key vi-tilde-map "i" 'info-mode)  (define-key vi-tilde-map "l" 'lisp-mode)  (define-key vi-tilde-map "n" 'nroff-mode)  (define-key vi-tilde-map "o" 'overwrite-mode)  (define-key vi-tilde-map "O" 'outline-mode)  (define-key vi-tilde-map "P" 'picture-mode)  (define-key vi-tilde-map "r" 'vi-readonly-mode)  (define-key vi-tilde-map "t" 'text-mode)  (define-key vi-tilde-map "v" 'vi-mode)  (define-key vi-tilde-map "x" 'tex-mode)  (define-key vi-tilde-map "~" 'vi-back-to-old-mode))(defun vi-debugging (arg)  "Toggle debug-on-error flag.  If prefix arg is given, set t."  (interactive "P")  (if arg      (setq debug-on-error t)    (setq debug-on-error (not debug-on-error)))  (if debug-on-error      (message "Debug-on-error ...")    (message "NO more debug-on-error")))(defun vi-back-to-old-mode ()  "Go back to the previous mode without setting up for insertion."  (interactive)  (if vi-mode-old-major-mode      (progn	(setq mode-name vi-mode-old-mode-name)	(use-local-map vi-mode-old-local-map)	(setq major-mode vi-mode-old-major-mode)	(setq case-fold-search vi-mode-old-case-fold)	(set-buffer-modified-p (buffer-modified-p)))))(defun vi-readonly-mode ()  "Toggle current buffer's readonly flag."  (interactive)  (setq buffer-read-only (not buffer-read-only)))(defvar vi-com-map nil   "Keymap used in Evi's command stateCommand state includes most of the vi editing commands, with some Emacscommand extensions.")(put 'vi-undefined 'suppress-keymap t)(if vi-com-map nil  (setq vi-com-map (make-keymap));;(fillarray vi-com-map 'vi-undefined)  (define-key vi-com-map "\C-@" 'vi-mark-region) ; extension  (define-key vi-com-map "\C-a" 'vi-ask-for-info)  ; extension  (define-key vi-com-map "\C-b" 'vi-backward-windowfull)  (define-key vi-com-map "\C-c" 'vi-do-old-mode-C-c-command) ; extension  (define-key vi-com-map "\C-d" 'vi-scroll-down-window)  (define-key vi-com-map "\C-e" 'vi-expose-line-below)  (define-key vi-com-map "\C-f" 'vi-forward-windowfull)  (define-key vi-com-map "\C-g" 'keyboard-quit)  (define-key vi-com-map "\C-i" 'indent-relative-maybe) ; TAB  (define-key vi-com-map "\C-j" 'vi-next-line) ; LFD  (define-key vi-com-map "\C-k" 'vi-kill-line) ; extension  (define-key vi-com-map "\C-l" 'recenter)  (define-key vi-com-map "\C-m" 'vi-next-line-first-nonwhite) ; RET  (define-key vi-com-map "\C-n" 'vi-next-line)  (define-key vi-com-map "\C-o" 'vi-split-open-line)  (define-key vi-com-map "\C-p" 'previous-line)  (define-key vi-com-map "\C-q" 'vi-query-replace) ; extension  (define-key vi-com-map "\C-r" 'vi-isearch-backward) ; modification  (define-key vi-com-map "\C-s" 'vi-isearch-forward)  ; extension  (define-key vi-com-map "\C-t" 'vi-transpose-objects) ; extension  (define-key vi-com-map "\C-u" 'vi-scroll-up-window)  (define-key vi-com-map "\C-v" 'scroll-up) ; extension  (define-key vi-com-map "\C-w" 'vi-kill-region)   ; extension  (define-key vi-com-map "\C-x" 'Control-X-prefix) ; extension  (define-key vi-com-map "\C-y" 'vi-expose-line-above)  (define-key vi-com-map "\C-z" 'suspend-emacs)  (define-key vi-com-map "\e"   'ESC-prefix); C-[ (ESC)  (define-key vi-com-map "\C-\\" 'vi-unimplemented)  (define-key vi-com-map "\C-]" 'find-tag)  (define-key vi-com-map "\C-^" 'vi-locate-def)  ; extension  (define-key vi-com-map "\C-_" 'vi-undefined)   (define-key vi-com-map " " 'forward-char)  (define-key vi-com-map "!"  'vi-operator)  (define-key vi-com-map "\"" 'vi-char-argument)  (define-key vi-com-map "#"  'universal-argument) ; extension  (define-key vi-com-map "$"  'end-of-line)  (define-key vi-com-map "%"  'vi-find-matching-paren)  (define-key vi-com-map "&"  'vi-unimplemented)  (define-key vi-com-map "'"  'vi-goto-line-mark)  (define-key vi-com-map "("  'backward-sexp)  (define-key vi-com-map ")"  'forward-sexp)  (define-key vi-com-map "*"  'vi-name-last-change-or-macro) ; extension  (define-key vi-com-map "+"  'vi-next-line-first-nonwhite)  (define-key vi-com-map ","  'vi-reverse-last-find-char)  (define-key vi-com-map "-"  'vi-previous-line-first-nonwhite)  (define-key vi-com-map "."  'vi-redo-last-change-command)  (define-key vi-com-map "/"  'vi-search-forward)  (define-key vi-com-map "0"  'beginning-of-line)  (define-key vi-com-map "1"  'vi-digit-argument)  (define-key vi-com-map "2"  'vi-digit-argument)  (define-key vi-com-map "3"  'vi-digit-argument)  (define-key vi-com-map "4"  'vi-digit-argument)  (define-key vi-com-map "5"  'vi-digit-argument)  (define-key vi-com-map "6"  'vi-digit-argument)  (define-key vi-com-map "7"  'vi-digit-argument)  (define-key vi-com-map "8"  'vi-digit-argument)  (define-key vi-com-map "9"  'vi-digit-argument)  (define-key vi-com-map ":"  'vi-ex-cmd)  (define-key vi-com-map ";"  'vi-repeat-last-find-char)  (define-key vi-com-map "<"  'vi-operator)  (define-key vi-com-map "="  'vi-operator)  (define-key vi-com-map ">"  'vi-operator)  (define-key vi-com-map "?"  'vi-search-backward)  (define-key vi-com-map "@"  'vi-call-named-change-or-macro) ; extension  (define-key vi-com-map "A"  'vi-append-at-end-of-line)  (define-key vi-com-map "B"  'vi-backward-blank-delimited-word)  (define-key vi-com-map "C"  'vi-change-rest-of-line)  (define-key vi-com-map "D"  'vi-kill-line)  (define-key vi-com-map "E"  'vi-end-of-blank-delimited-word)  (define-key vi-com-map "F"  'vi-backward-find-char)  (define-key vi-com-map "G"  'vi-goto-line)  (define-key vi-com-map "H"  'vi-home-window-line)  (define-key vi-com-map "I"  'vi-insert-before-first-nonwhite)  (define-key vi-com-map "J"  'vi-join-lines)  (define-key vi-com-map "K"  'vi-undefined)   (define-key vi-com-map "L"  'vi-last-window-line)  (define-key vi-com-map "M"  'vi-middle-window-line)  (define-key vi-com-map "N"  'vi-reverse-last-search)  (define-key vi-com-map "O"  'vi-open-above)  (define-key vi-com-map "P"  'vi-put-before)  (define-key vi-com-map "Q"  'vi-quote-words) ; extension  (define-key vi-com-map "R"  'vi-replace-chars)  (define-key vi-com-map "S"  'vi-substitute-lines)  (define-key vi-com-map "T"  'vi-backward-upto-char)  (define-key vi-com-map "U"  'vi-unimplemented)  (define-key vi-com-map "V"  'vi-undefined)   (define-key vi-com-map "W"  'vi-forward-blank-delimited-word)  (define-key vi-com-map "X"  'call-last-kbd-macro) ; modification/extension  (define-key vi-com-map "Y"  'vi-yank-line)  (define-key vi-com-map "Z" (make-sparse-keymap)) ;allow below prefix command  (define-key vi-com-map "ZZ" 'vi-save-all-and-exit)  (define-key vi-com-map "["  'vi-unimplemented)  (define-key vi-com-map "\\" 'vi-operator) ; extension for vi-narrow-op  (define-key vi-com-map "]"  'vi-unimplemented)  (define-key vi-com-map "^"  'back-to-indentation)  (define-key vi-com-map "_"  'vi-undefined)  (define-key vi-com-map "`"  'vi-goto-char-mark)  (define-key vi-com-map "a"  'vi-insert-after)  (define-key vi-com-map "b"  'backward-word)  (define-key vi-com-map "c"  'vi-operator)  (define-key vi-com-map "d"  'vi-operator)  (define-key vi-com-map "e"  'vi-end-of-word)  (define-key vi-com-map "f"  'vi-forward-find-char)  (define-key vi-com-map "g"  'vi-beginning-of-buffer) ; extension  (define-key vi-com-map "h"  'backward-char)  (define-key vi-com-map "i"  'vi-insert-before)  (define-key vi-com-map "j"  'vi-next-line)  (define-key vi-com-map "k"  'previous-line)  (define-key vi-com-map "l"  'forward-char)  (define-key vi-com-map "m"  'vi-set-mark)  (define-key vi-com-map "n"  'vi-repeat-last-search)  (define-key vi-com-map "o"  'vi-open-below)  (define-key vi-com-map "p"  'vi-put-after)  (define-key vi-com-map "q"  'vi-replace)  (define-key vi-com-map "r"  'vi-replace-1-char)  (define-key vi-com-map "s"  'vi-substitute-chars)  (define-key vi-com-map "t"  'vi-forward-upto-char)  (define-key vi-com-map "u"  'undo)  (define-key vi-com-map "v"  'vi-verify-spelling)   (define-key vi-com-map "w"  'vi-forward-word)  (define-key vi-com-map "x"  'vi-kill-char)  (define-key vi-com-map "y"  'vi-operator)  (define-key vi-com-map "z"  'vi-adjust-window)  (define-key vi-com-map "{"  'backward-paragraph)  (define-key vi-com-map "|"  'vi-goto-column)  (define-key vi-com-map "}"  'forward-paragraph)  (define-key vi-com-map "~"  'vi-change-case)  (define-key vi-com-map "\177" 'delete-backward-char))(put 'backward-char 'point-moving-unit 'char)(put 'vi-next-line 'point-moving-unit 'line)(put 'next-line 'point-moving-unit 'line)(put 'forward-line 'point-moving-unit 'line)(put 'previous-line 'point-moving-unit 'line)(put 'vi-isearch-backward 'point-moving-unit 'search)(put 'vi-search-backward 'point-moving-unit 'search)(put 'vi-isearch-forward 'point-moving-unit 'search)(put 'vi-search-forward 'point-moving-unit 'search)(put 'forward-char 'point-moving-unit 'char)(put 'end-of-line 'point-moving-unit 'char)(put 'vi-find-matching-paren 'point-moving-unit 'match)(put 'vi-goto-line-mark 'point-moving-unit 'line)(put 'backward-sexp 'point-moving-unit 'sexp)(put 'forward-sexp 'point-moving-unit 'sexp)(put 'vi-next-line-first-nonwhite 'point-moving-unit 'line)(put 'vi-previous-line-first-nonwhite 'point-moving-unit 'line)(put 'vi-reverse-last-find-char 'point-moving-unit 'rev-find)(put 'vi-re-search-forward 'point-moving-unit 'search)(put 'beginning-of-line 'point-moving-unit 'char)(put 'vi-beginning-of-buffer 'point-moving-unit 'char)(put 'vi-repeat-last-find-char 'point-moving-unit 'find)(put 'vi-re-search-backward 'point-moving-unit 'search)(put 'vi-backward-blank-delimited-word 'point-moving-unit 'WORD)(put 'vi-end-of-blank-delimited-word 'point-moving-unit 'match)(put 'vi-backward-find-char 'point-moving-unit 'find)(put 'vi-goto-line 'point-moving-unit 'line)(put 'vi-home-window-line 'point-moving-unit 'line)(put 'vi-last-window-line 'point-moving-unit 'line)(put 'vi-middle-window-line 'point-moving-unit 'line)(put 'vi-reverse-last-search 'point-moving-unit 'rev-search)(put 'vi-backward-upto-char 'point-moving-unit 'find)(put 'vi-forward-blank-delimited-word 'point-moving-unit 'WORD)(put 'back-to-indentation 'point-moving-unit 'char)(put 'vi-goto-char-mark 'point-moving-unit 'char)(put 'backward-word 'point-moving-unit 'word)(put 'vi-end-of-word 'point-moving-unit 'match)(put 'vi-forward-find-char 'point-moving-unit 'find)(put 'backward-char 'point-moving-unit 'char)(put 'vi-forward-char 'point-moving-unit 'char)(put 'vi-repeat-last-search 'point-moving-unit 'search)(put 'vi-forward-upto-char 'point-moving-unit 'find)(put 'vi-forward-word 'point-moving-unit 'word)(put 'vi-goto-column 'point-moving-unit 'match)(put 'forward-paragraph 'point-moving-unit 'paragraph)(put 'backward-paragraph 'point-moving-unit 'paragraph);;; region mark commands(put 'mark-page 'point-moving-unit 'region)(put 'mark-paragraph 'point-moving-unit 'region)(put 'mark-word 'point-moving-unit 'region)(put 'mark-sexp 'point-moving-unit 'region)(put 'mark-defun 'point-moving-unit 'region)(put 'mark-whole-buffer 'point-moving-unit 'region)(put 'mark-end-of-sentence 'point-moving-unit 'region)(put 'mark-c-function 'point-moving-unit 'region);;;(defvar vi-mark-alist nil  "Alist of (NAME . MARK), marks are local to each buffer.")(defvar vi-scroll-amount (/ (window-height) 2)  "Default amount of lines for scrolling (used by "^D"/"^U").")(defvar vi-shift-width 4  "Shift amount for "<"/">" operators.")(defvar vi-ins-point nil		; integer  "Last insertion point.  Should use 'mark' instead.")(defvar vi-ins-length nil		; integer  "Length of last insertion.")(defvar vi-ins-repetition nil		; integer  "The repetition required for last insertion.")(defvar vi-ins-overwrt-p nil		; boolean  "T if last insertion was a replace actually.")(defvar vi-ins-prefix-code nil		; ready-to-eval sexp  "Code to be eval'ed before (redo-)insertion begins.")(defvar vi-last-find-char nil		; cons cell  "Save last direction, char and upto-flag used for char finding.")(defvar vi-last-change-command nil	; cons cell  "Save commmands for redoing last changes.  Each command is in (FUNC . ARGS)form that is ready to be 'apply'ed.")(defvar vi-last-shell-command nil	; last shell op command line  "Save last shell command given for \"!\" operator.")(defvar vi-insert-state nil             ; boolean  "T if it is in insert state."); in "loaddefs.el";(defvar search-last-string "" ;  "Last string search for by a search command.")(defvar vi-search-last-command nil	; (re-)search-forward(backward)  "Save last search command for possible redo.")(defvar vi-mode-old-local-map nil  "Save the local-map used before entering vi-mode.")(defvar vi-mode-old-mode-name nil  "Save the mode-name before entering vi-mode.")  (defvar vi-mode-old-major-mode nil  "Save the major-mode before entering vi-mode.")(defvar vi-mode-old-case-fold nil)  ;(defconst vi-add-to-mode-line-1;  '(overwrite-mode nil " Insert"));; Value is same as vi-add-to-mode-line-1 when in vi mode,;; but nil in other buffers.;(defvar vi-add-to-mode-line nil)(defun vi-mode-setup ()  "Setup a buffer for vi-mode by creating necessary buffer-local variables."

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -