لا تعمل وحدات ماكرو Vim عند استخدام viper + vimpulse في Emacs

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

  •  01-07-2019
  •  | 
  •  

سؤال

أي تعديلات أخرى لجعل emacs تشبه vim قدر الإمكان ستكون موضع تقدير أيضًا.

إضافة:السبب الرئيسي الذي يجعلني لا أستخدم vim فقط هو أنني أحب الطريقة التي يتيح لك بها 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) أثناء تشغيله.

ليس لدي أي تعديلات على شكل أفعى أو vimpulse لك، لكنني أوصي بتجربة وضع المتابعة.

بالطبع أنصحك أيضًا بالبدء في تعلم Emacs أيضًا.أعني، إذا كنت قد وصلت إلى هذا الحد، فمن الأفضل لك الاطلاع على البرنامج التعليمي وربما إلقاء نظرة على emacswiki.

يدعم إصدار VIM الذي أستخدمه الدعم (إصدار النافذة) تقسيم الملف إلى إطارين مختلفين باستخدام "Ctrl+W s"...

يتيح لك Vim بسهولة فتح ملف في إطارين مختلفين:

:split لتقسيمها أفقيا

:vsplit لتقسيمها عموديا

يمكنك تقسيم الشاشة عدة مرات كما تريد بين نفس الملف أو ملفات مختلفة أو كليهما.

CTRL-w-w تبديل الإطارات.

:resize +n أو :resize -n تغيير حجم الإطار الحالي.

يعد 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

.الافعى

    (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).
    أن هذا الوضع يتسبب في توقف جميع المفاتيح الموجودة على لوحة المفاتيح الخاصة به ما لم يحذف الخط الذي يقرأ "Viper-Key Maps من Macro-Get-get-keymap في هذا الملف

إذا كان الأمر كذلك، يمكنك تجربة الحل المذكور.

حصلت على هذه المعلومات من إيماكس ويكي, ، وهو خطأ معروف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top