سؤال

كيف يمكنني نسخ خط 10 مرات بسهولة في Emacs ؟ أنا لا يمكن العثور على نسخة خط اختصار أو وظيفة.يمكنني استخدام C-aC-spcC-م-ث إلى مشقة نسخ الخط ولكن كيف يمكنني ثم لصقه أكثر من مرة ؟

أي الأفكار قبل أن أكتب بلدي وظائف.

هل كانت مفيدة؟

المحلول

نسخ:

إذا كنت في كثير من الأحيان العمل مع خطوط, قد تحتاج إلى إجراء نسخ (kill-ring-save) وقطع (kill-region) العمل على خطوط عند عدم تحديد أي منطقة:

(defadvice kill-ring-save (before slickcopy activate compile)
  "When called interactively with no active region, copy a single line instead."
  (interactive
   (if mark-active (list (region-beginning) (region-end))
     (list (line-beginning-position)
           (line-beginning-position 2)))))
(defadvice kill-region (before slickcut activate compile)
  "When called interactively with no active region, kill a single line instead."
  (interactive
   (if mark-active (list (region-beginning) (region-end))
     (list (line-beginning-position)
           (line-beginning-position 2)))))

ثم يمكنك نسخ الخط مع M-w.

لصق:

في كثير من الأحيان بادئة الحجة فقط يقوم بإجراء عدة مرات, إذا كنت تتوقع C-u ج 10 ص إلى العمل ، ولكن في هذه الحالة C-y يستخدم حجة يعني أي عنصر من قتل الدائري إلى "نثر" (لصق).الحل الوحيد الذي يمكنني أن أفكر في ما kronoz يقول:تسجيل ماكرو مع C-x ( C-y C-x ) ومن ثم السماح حجة C-u الذهاب إلى kmacro-end-and-call-macro بدلا من (أن ج-ش 9 ج-x e أو C-9 ج-x e أو M-9 ج-x e).

طريقة أخرى:يمكنك أيضا مجرد البقاء في M-x viper-mode واستخدام yy10p :)

نصائح أخرى

يمكنك استخدام لوحة المفاتيح ماكرو على أن:-

ج-C-k-C x ( C-y ج-ي ج-x ) ج-ش 9 ج-x e

الشرح:-

  • ج -:انتقل إلى بداية السطر
  • C-k :تقتل خط
  • ج-x ( :بدء تسجيل لوحة المفاتيح ماكرو
  • ج-y :نثر قتل خط
  • ج-ي :الانتقال إلى السطر التالي
  • ج-س ) :إيقاف تسجيل لوحة المفاتيح ماكرو
  • ج-يو 9 :كرر 9 مرات
  • ج-x e :تنفيذ لوحة المفاتيح ماكرو

قد تعرف هذا, ولكن العديد من الأوامر "ج-ش 10" بادئة سوف تفعل خدعة.للأسف C-y نثر الأمر "ج-ش" هو تعريف تعني "العودة أن العديد من العناصر في قتل الخاتم و سحب هذا البند".

أعتقد أنك قد تكون قادرا على استخدام نسخ إلى تسجيل وإدراج-سجل الأوامر مع C-u بادئة الأمر ولكن على ما يبدو أنه لا يعمل ايضا.

أيضا ج-x z "كرر الأمر الأخير" يبدو أن في مأمن C-u.

آخر يعتقد أن استخدام M-:للحصول على التقييم السريع واكتب قليلا من elisp.اعتقدت شيئا مثل (dotimes '10 'نثر) قد فعل ذلك, ولكن لا يبدو أن.

لذا يبدو باستخدام C-u على ماكرو قد يكون في الواقع أفضل ما يمكنك فعله قصيرة من الكتابة الخاصة بك قليلا وظيفة.

كان التصويت سأصوت kronoz الإجابة.

أنت لا تحتاج كلتا ج-خ ) و C-x e في هذا المثال.

يمكنك فقط إعطاء تكرار الحجة مباشرة إلى C-x ).هذا يتوقف التسجيل و يكرر الماكرو في خطوة واحدة.أو يمكنك تخطي C-x ) والذهاب مباشرة الى C-x e حيث C-x e سوف ينتهي التسجيل قبل القيام يكرر.

الطريقة التي يختار يعتمد على كيف تريد تكرار العد إلى العمل.C-x ) تقول كم يكرر أردت في المجموع (حتى 10 في هذه الحالة).C-x e كنت بحاجة إلى أن أقول كم من يكرر اليسار (أي9).


ج-C-k-C k كما قتل زائدة السطر, لذلك لم يكن لديك إلى وضعه مرة أخرى نفسك في وقت لاحق.انها أسرع من استخدام علامة ، و لا تحتاج إلى تغيير أي من المتغيرات.

حتى أفضل (إلا إذا كنت في المحطة) ، يمكنك استخدام C-S-Backspace* لقتل خط كامل, بغض النظر عن أين كنت في ذلك.

[* إذا كنت تستخدم X windows, تأكد من أن نوع التحول (لا alt) أو يمكنك إنهاء جلسة العمل الخاصة بك!]

يتحدث من المحطات ، م-9 هو بديل جيد إذا كنت تجد أنك لا تستطيع نوع C-9.


في Emacs 22 و أعلى ، بشكل افتراضي F3 يبدأ ماكرو و F4 نهاية/يكرر ماكرو.كنت مجرد ضرب F3 لبدء التسجيل ، ضرب F4 عند الانتهاء من ذلك ، وضرب F4 مرة أخرى إلى تكرار الماكرو.(F4 أيضا يأخذ حجة.)


وضع كل هذا معا ، للحصول على 10 نسخ من السطر الحالي:

  • C-S-Backspace :قتل هذا الخط
  • F3 :بدء تشغيل الماكرو
  • ج-y :نثر الخط
  • ج-1 ج-0 F4 :جعل ذلك 10 الأمريكان

ليس تماما قصيرة قدر y y 10 p, ولكن قريبة جدا.:)

وهنا وظيفة أخذت من نظام التشغيل/2 ميناء Emacs.(نعم, لقد تم استخدام Emacs لفترة من الوقت.)

;; Author: Eberhard Mattes <mattes@azu.informatik.uni-stuttgart.de>
(defun emx-dup-line (arg)
  "Duplicate current line.
Set mark to the beginning of the new line.
With argument, do this that many times."
  (interactive "*p")
  (setq last-command 'identity) ; Don't append to kill ring
  (let ((s (point)))
    (beginning-of-line)
    (let ((b (point)))
      (forward-line)
      (if (not (eq (preceding-char) ?\n)) (insert ?\n))
      (copy-region-as-kill b (point))
    (while (> arg 0)
      (yank)
      (setq arg (1- arg)))
    (goto-char s))))

يجب أن لا بد أن F9 d:

(global-set-key [f9 ?d]    'emx-dup-line)

ثم أود أن استخدام C-u 10 F9 d لتكرار خط 10 مرات.

الطريقة الوحيدة التي أعرف أن تكرار الأوامر التعسفية هو استخدام "كرر قبل حجة" الميزة من لوحة المفاتيح وحدات الماكرو.

ج-ج-المساحة أسفل M-w-C x ( C-y C-x ) ج-ج 9-x e

  • ج -:انتقل إلى بداية السطر
  • ج-الفضاء :تعيين مارك
  • أسفل :انتقل إلى بداية السطر التالي
  • M-w :نسخ المنطقة
  • ج-x ( :بدء تشغيل لوحة المفاتيح ماكرو
  • ج-y :نثر نسخ الخط
  • ج-س ) :نهاية لوحة المفاتيح ماكرو
  • ج-9 ج-x e :تنفيذ لوحة المفاتيح ماكرو تسع مرات.

هذا نوع من الضعف مقارنة همة.ولكن فقط لأن همة هو مثير للدهشة كفاءة في هذا النوع من الشيء.

إذا كنت حقا بحاجة مشروط السادس-مثل التفاعل, يمكنك استخدام واحدة من السادس مضاهاة وسائط مثل الافعى-الوضعية.تحقق في قسم "مضاهاة" من على الانترنت emacs دليل.

هل تريد أن تقتل الخط:ج-C-k ، ثم ج-ذ أو ؟

أنا لا أعرف من مباشرة أي ما يعادل (C-y 10 مرات هو أفضل وأنا أعلم) ، ولكن قد تكون مهتمة في فايبر ، وهو السادس مضاهاة حزمة emacs.انها جزء من معيار emacs التوزيع.

على أساس Baxissimo الجواب أنا defuned هذا:

(defun yank-n-times (arg)
  "yank prefix-arg number of times. Not safe in any way."
  (interactive "*p")
  (dotimes 'arg (yank)))

هذه بعض مفتاح الاتصال مع بادئة الحجة ، وقبالة تذهب.

تحرير (كما عدلت التفاعلية الكلمة أعلاه أن تكون أقل رديء)

أو من هنا نسخة التي يمكن فرز من محل نثر-pop:

(defun yank-n-times (&optional arg)
  "yank prefix-arg number of times. Call yank-pop if last command was yank."
  (interactive "*p")
  (if (or (string= last-command "yank")
      (string= last-command "yank-pop"))
      (yank-pop arg)
    (if (> arg 1)
    (dotimes 'arg (yank))
      (message "Previous arg was not a yank, and called without a prefix."))))

الرسالة هو نوع من الكذب ، لكن لا يجب أن يطلق عليه دون بادئة أكبر من 1 على أي حال, لذا.

لست متأكدا إذا كان هذا هو فكرة جيدة, ولكن أنا محل بلدي مع هذا, سوف نرى كيف أن يذهب.

يمكنك نثر خط (أو المنطقة) عشر مرات مع عدد أقل من المفاتيح:

  • علامة خط (أو المنطقة)
  • نثر النص المحدد 10 مرات:

C-w C-x ( C-y C-1 C-0 C-x )

بدلا من ذلك استخدم F3 و F4 مفاتيح الدالة على أن تبدأ وتنتهي لوحة المفاتيح ماكرو:

C-w F3 C-y C-1 C-0 F4

يمكنك الحصول على خط مع C-k, أنت تجعل الأمر التالي يحدث ذلك عشر مرات مع C-u 10 ، ثم لصق الخط مع C-y.بسيطة جدا.

إذا كنت تريد دائما ج-ك فعل كل خط ، يمكنك تعيين قتل كل سطر t.لا مزيد من العبث مع C-a أو C-e.

هناك الكثير يمكنك القيام به مع الهوى قتل حلقات سجلات وحدات الماكرو ، وأنا أشجعكم أن تتعلم منهم ، ولكن اخراج خط عشر مرات لا يجب أن تكون صعبة أو غريبة.

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