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





Вы всегда можете запустить vim в буфере оболочки и изменить его размер, чтобы он заполнил весь фрейм?
Если вам нужна функциональность VIM, имеет смысл просто установить VIM!
У меня нет для вас никаких настроек viper или vimpulse, но я рекомендую вам попробовать режим Follow.
Конечно, я также рекомендую вам начать изучение Emacs. Я имею в виду, что если вы дошли до этого, вы могли бы также пройти обучение и, возможно, взглянуть на emacswiki.
Я не уверен, отвечу ли я на ваш вопрос, поскольку не совсем понятно, о чем вы спрашиваете (почему макросы не работают или какие настройки доступны для эмуляции vim в emacs)
так, это твоя проблема ?:
- One user who uses an ancient emacs-snapshot (from 2005) mentions
that this mode causes all the keys on his keyboard to stop working unless he deletes the line that reads 'viper--key-maps from the macro my-get-emulation-keymap in this file
если это так, вы можете попробовать заявленное решение.
Я получил эту информацию от вики emacs, и это известная ошибка.
Что касается вознаграждения, скажем, вопрос в том, как заставить макросы vim работать в viper / emacs. Дополнительные советы по сокращению разрыва между истинным vim и vimpulse можно рассматривать как тай-брейк / бонус.
Я не знаю, как заставить работать макросы Vim, но поскольку вы просили настроить emacs, чтобы сделать 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) пока он работает.
Вы можете запустить VIM в клиент-серверный режим, тогда у вас может быть два окна, подключенных к одному экземпляру, что устраняет необходимость в Emacs.
Dreeves: да, это именно то, что делает pida IDE, и она отлично работает.
Версия VIM, которую я использую, поддерживает (версия для Windows) поддерживает разделение файла на 2 разных фрейма с помощью "Ctrl + W" ...
Интересно; это функция только для Windows?
«CTRL + W s» - это то же самое, что и: split, главное окно Vim по-прежнему одно. Вы не можете индивидуально свернуть одно из окон или перетащить одно из них на второй монитор.
Я не верю, что это функция только Windows. Если я запустил консольную версию vim, я смогу сделать то же самое. @Peter: Вопрос ничего не говорит о сворачивании или перетаскивании на дополнительные мониторы ...
В моей версии gVim для Windows «Ctrl-W s» (или «Ctrl-W v») разделяется на два окна, а не на два фрейма.
Vim позволяет легко открывать файл в двух разных фреймах:
:split, чтобы разделить его по горизонтали
:vsplit, чтобы разделить его по вертикали
Вы можете разделить экран столько раз, сколько хотите, между одним и тем же файлом, разными файлами или обоими.
CTRL-w-w переключает кадры.
:resize +n или :resize -n изменяет размер текущего кадра.
Спасибо, это хорошо, но у меня не совсем работает. Например, нельзя ставить кадры на разные мониторы.
Мне здесь что-то не хватает, но если это то, что вы пытаетесь сделать, почему бы просто не открыть один и тот же файл дважды, используя два разных окна vim?
Открытие файла дважды - это не одно и то же. У вас не будет общей истории отмен, и если вы отредактируете оба окна перед сохранением, объединить их будет невозможно. AFAIK Emacs этого не делает ...
Питер прав. В Emacs это работает точно так же, как разделение, несмотря на то, что оно находится в разных окнах (то, что emacs называет «фреймами»). Это то, что мне нужно.
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.
Замечательно - вы первый, кто использует награду!