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

StackOverflow https://stackoverflow.com/questions/98225

  •  01-07-2019
  •  | 
  •  

Вопрос

Любые другие настройки, позволяющие сделать emacs максимально похожим на vim, также будут оценены по достоинству.

Приложение:Основная причина, по которой я не использую просто vim, заключается в том, что мне нравится, как emacs позволяет открывать файл в двух разных фреймах [ДОБАВЛЕНО:извините, это смутило:Я имею в виду отдельный окна, которые emacs называет «фреймами»].Это похоже на вертикальное разделение, но мне не обязательно иметь одно огромное окно.

Это было полезно?

Решение

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

Другие советы

Я не знаю, как заставить работать макросы 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) пока он работает.

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

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

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

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

:split разделить его по горизонтали

:vsplit разделить его по вертикали

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

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

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

Emacs+vimpulse — это здорово, но я считаю, что правильный рабочий процесс — это широкое использование команд emacs в сочетании с ярлыками vim.Например, макросы F3 и F4 в emacs проще, чем qq и @q в vim.Также команды 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, но уж точно не наоборот!

п.с.большинство приведенных выше предложений поддерживаются последней версией vimpulse ПО УМОЛЧАНИЮ.

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

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

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

  • Один пользователь, использующий древний снимок emacs (2005 г.), упоминает
    что этот режим заставляет все ключи на его клавиатуре, чтобы прекратить работать, если он не удалит линию, которая читает гадюку-ключ из макроса My-Get-Emulation-Keymap в этом файле

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top