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

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

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

Замечательно - вы первый, кто использует награду!

Jarrod Dixon 27.01.2009 11:08

К вашему сведению, vim позволяет вам открывать один и тот же файл в двух разных частях одного и того же экземпляра vim. Вы также можете использовать вкладки vim. Не решение, а наблюдение.

Jack M. 30.01.2009 17:21
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
2
1 858
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

Вы всегда можете запустить 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 можно рассматривать как тай-брейк / бонус.

dreeves 28.01.2009 03:06

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

Ali Afshar 03.02.2009 05:55

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

Интересно; это функция только для Windows?

dreeves 28.01.2009 21:34

«CTRL + W s» - это то же самое, что и: split, главное окно Vim по-прежнему одно. Вы не можете индивидуально свернуть одно из окон или перетащить одно из них на второй монитор.

too much php 29.01.2009 00:24

Я не верю, что это функция только Windows. Если я запустил консольную версию vim, я смогу сделать то же самое. @Peter: Вопрос ничего не говорит о сворачивании или перетаскивании на дополнительные мониторы ...

Sean 29.01.2009 14:08

В моей версии gVim для Windows «Ctrl-W s» (или «Ctrl-W v») разделяется на два окна, а не на два фрейма.

Sébastien RoccaSerra 29.01.2009 15:17

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

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

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

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

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

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

Спасибо, это хорошо, но у меня не совсем работает. Например, нельзя ставить кадры на разные мониторы.

dreeves 28.01.2009 21:33

Мне здесь что-то не хватает, но если это то, что вы пытаетесь сделать, почему бы просто не открыть один и тот же файл дважды, используя два разных окна vim?

MCS 28.01.2009 21:51

Открытие файла дважды - это не одно и то же. У вас не будет общей истории отмен, и если вы отредактируете оба окна перед сохранением, объединить их будет невозможно. AFAIK Emacs этого не делает ...

too much php 29.01.2009 00:28

Питер прав. В Emacs это работает точно так же, как разделение, несмотря на то, что оно находится в разных окнах (то, что emacs называет «фреймами»). Это то, что мне нужно.

dreeves 29.01.2009 22:06

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.

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