Макросы Vim не работают при использовании viper + vimpulse в Emacs

Также будут оценены любые другие настройки для создания emacs как vim-like.

Добавление: Основная причина, по которой я не просто использую vim, - это то, что мне нравится, как emacs позволяет открывать файл в двух разных кадрах [ADDED: извините, это путано: я имею в виду отдельные окна, которые emacs называет "фреймами", ]. Это похоже на вертикальное разделение, но мне не нужно иметь одно огромное окно.

Ответ 1

Вы можете запустить VIM в режиме клиентского сервера, тогда у вас может быть два окна, подключающихся к одному экземпляру, что устраняет необходимость в Emacs.

Ответ 2

Я не знаю, как заставить макросы Vim работать, но так как вы попросили ухищрения для того, чтобы сделать emacs максимально похожим на vim, вот несколько дополнений к vimpulse, которые я использую каждый день:

(define-key viper-vi-global-user-map [(delete)] 'delete-char)
(define-key viper-vi-global-user-map "/" 'isearch-forward-regexp)
(define-key viper-vi-global-user-map "?" 'isearch-backward-regexp)
(define-key viper-vi-global-user-map "\C-wh" 'windmove-left)
(define-key viper-vi-global-user-map "\C-wj" 'windmove-down)
(define-key viper-vi-global-user-map "\C-wk" 'windmove-up)
(define-key viper-vi-global-user-map "\C-wl" 'windmove-right)
(define-key viper-vi-global-user-map "\C-wv" '(lambda () (interactive)
                                                (split-window-horizontally)
                                                (other-window 1)
                                                (switch-to-buffer (other-buffer))))

(define-key viper-visual-mode-map "F" 'viper-find-char-backward)
(define-key viper-visual-mode-map "t" 'viper-goto-char-forward)
(define-key viper-visual-mode-map "T" 'viper-goto-char-backward)
(define-key viper-visual-mode-map "e" '(lambda ()
                                         (interactive)
                                         (viper-end-of-word 1)
                                         (viper-forward-char 1)))

(push '("only" (delete-other-windows)) ex-token-alist)
(push '("close" (delete-window)) ex-token-alist)

Конечно, изучение Emacs тоже очень важно, но Emacs полагается на настройку, чтобы заставить себя вести себя так, как вы этого хотите. И привязки клавиш Vim по умолчанию настолько удобны, что использование Viper просто означает, что Viper выполняет некоторые настройки Emacs для вас.

Что касается использования Vim вместо Emacs, я обожаю Vim, но мне нравится интерактивность системы Lisp, которая является Emacs. Ничто не похоже на ввод строки кода в любом месте вашего редактора и мгновенное вычисление ее одним нажатием клавиши, изменение или просмотр состояния вашего редактора из вашего редактора (включая документацию в реальном времени) одним нажатием клавиши (C-M-x), в то время как это работает.

Ответ 3

У меня нет никаких гадюков или vimpulse твиков для вас, но я рекомендую вам попробовать следующий режим.

Конечно, я также рекомендую вам также начать изучать Emacs. Я имею в виду, если вы находитесь на этом пути, вы можете пройти через учебник и, возможно, взглянуть на emacswiki.

Ответ 4

Версия поддержки VIM я (версия Window) поддерживает разделение файла на 2 разных кадра, используя "Ctrl + W s"...

Ответ 5

Vim легко позволяет открыть файл в двух разных кадрах:

:split, чтобы разделить его по горизонтали

:vsplit, чтобы разбить его по вертикали

Вы можете разделить экран столько раз, сколько хотите, между тем же файлом, разными файлами или обоими.

CTRL-w-w переключает кадры.

:resize +n или :resize -n изменяет размер текущего кадра.

Ответ 6

Emacs + vimpulse - это потрясающе, но я считаю, что его правильный рабочий процесс заключается в том, чтобы свободно использовать команды emacs в сочетании с ярлыками vim. Например, ярлык макросов emacs F3 и F4 проще, чем vim qq и @q. Также доступ к командам emacs осуществляется через команды Alt + x, а не: команды. Хотя vimpulse поддерживает несколько важных команд vim, они доступны только для совместимости.

Подсказки - это мои специфические настройки vimpulse.

.emacs

   ; I use C-d to quit emacs and vim
   (vimpulse-global-set-key 'vi-state (kbd "C-d") 'save-buffers-kill-terminal)
   ; use ; instead of :
   (vimpulse-global-set-key 'vi-state (kbd ";") 'viper-ex)
   ; use C-e instead of $. This works for all motion command too! (e.g. d C-e is easier to type than d$)
   (vimpulse-global-set-key 'vi-state (kbd "C-e") 'viper-goto-eol)
   (defun t_save() (interactive)(save-buffer)(viper-change-state-to-vi)) 
   (global-set-key (kbd "\C-s") 't_save) ; save using C-s instead of :w<CR> or C-x-s

    (defun command-line-diff (switch)
          (let ((file1 (pop command-line-args-left))
                (file2 (pop command-line-args-left)))
            (ediff file1 file2)))

    ;; Usage: emacs -diff file1 file2 (much better then vimdiff)
    (add-to-list 'command-switch-alist '("-diff" . command-line-diff))

Если вам нравится терминал, вы можете использовать emacs -nw. В этом случае это дополнение буфера обмена полезно. http://www.lingotrek.com/2010/12/integrating-emacs-with-x11-clipboard-in.html

.viper

    (setq viper-inhibit-startup-message 't)
    (setq viper-expert-level '3)
    (setq viper-ESC-key "\C-c") ; use C-c instead of ESC. unlike vim, C-c works perfectly with vimpulse.

Почти все, что делает vim, можно сделать так же легко (если не так) в emacs + vimpulse, но определенно не наоборот!

p.s. большинство вышеперечисленных предложений поддерживаются недавним vimpulse BY DEFAULT.

Ответ 7

Вы всегда можете запустить vim в буфере оболочки и изменить его размер так, чтобы он заполнил весь кадр?

Ответ 8

Если вы хотите функциональность VIM, имеет смысл просто установить VIM!

Ответ 9

Я не уверен, что я отвечу на ваш вопрос, так как не совсем понятно, что вы спрашиваете (почему макрос не работает или какие твики доступны для эмуляции vim в emacs)
так, это ваша проблема?:

  • Один пользователь, который использует древний emacs-снимок (с 2005 года), упоминает что этот режим вызывает все клавиши на его клавиатура перестанет работать, если он удаляет строку, которая читает 'viper - ключевые карты из макроса my-get-emulation-keymap в этом файле

если это так, вы можете попробовать заявленное решение.

Я получил эту информацию от emacs wiki, и это известная ошибка.