غير قادر على الحصول على VIM مثل CW F FON SCREEN DOPLE-MODE

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

  •  23-08-2019
  •  | 
  •  

سؤال

أريد فتح مسار إلى VIM من وضع نسخ الشاشة بواسطة

Ctrl-A f

وبالمثل ما يمكنني فتح ملفات خارجية في VIM بواسطة

Ctrl-W f

كيف يمكنك فتح مسار في VIM في وضع نسخ الشاشة؟


--- شكرا لك على Samuil للحصول على خطوة كروك

دعونا نفترض الماوس في المسار / الملف في التعليمات البرمجية التالية التي تمثل العرض عند تشغيل الشاشة

text[space]PATH/file[space]text

أنا اضغط ^ a f في المسار / الملف. يجب أن يوفر مسار الملف إلى / tmp / screencopyfile بحيث يمكننا استخدامها cat في الأمر التالي الذي ^A f يجب أن تبدأ:

^A: exec vim `cat PATH/file`

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

وبعبارة أخرى، نريد أن نجعل الرسالة f تمثل

exec vim `cat /tmp/screenCopyFile`

عن طريق ربط في .Screenrc.

شكرا لك من أجل إجابتك!

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

المحلول

حسنا، إليك حلا:

وضع ما يلي في /path/to/edit-file-under-cursor.screen:

# edit-file-under-cursor.screen

# prevent messages from slowing this down
msgminwait 0
# copy path starting at cursor
stuff " Ebe "
# write the path to a file
writebuf /tmp/screen-copied-path
# open that file in vim in a new screen window
screen /bin/sh -c 'vim `cat /tmp/screen-copied-path`'
# turn message waiting back on
msgminwait 1

# vi: ft=screen

ثم أضف هذا الخط إلى .screenrc:

# bind CTRL-f to open the file starting at the cursor
# when in copy mode
bindkey -m ^f source /path/to/edit-file-under-cursor.screen

(تغيير /path/to/ بشكل مناسب)

ثم، للاستخدام، تأكد من إعادة التشغيل screen (أو إعادة تحميل .screenrc). أدخل وضع النسخ مع ^A[, ، المؤشر إلى الطابع الأول من اسم الملف، ثم ضرب CTRL-f.

لقد اختبرت هذا، ويعمل من أجلي، أخبرني إذا كان لديك أي مشاكل.

إذا كنت تريد أن ترى كيف أعرف كيفية القيام بذلك، تحقق man screen لمعرفة كيف تعمل جميع الأوامر المختلفة.

هناك تحسن واحد يمكن أن يتمكن من العثور على بداية المسار، لكنني لم أستطع القيام بذلك بشكل موثوق بأوامر حركة وضع نسخ الشاشة فقط (مثل أي شيء تم نقله إلى الأول / من "/a/path"انتقل إلى | من "|/a/path")

هذا يرجع إلى حدود screenأوامر الحركة في وضع النسخ:

مفاتيح الحركة: H، J، K، L لنقل خط المؤشر حسب الخط أو العمود حسب العمود. 0، ^ و $ الانتقال إلى أقصى أعمدة، إلى أول شخص آخر أو آخر حرف غير بيضاء على السطر. H، M و L لنقل المؤشر إلى أقصى أعمدة من الجزء العلوي أو مركز أو أسفل النافذة. + و - وظائف خط واحد لأعلى ولأسفل. يتحرك G إلى الخط المطلق المحدد (الافتراضي: نهاية المخزن المؤقت). | يتحرك إلى العمود المطلق المحدد. W، B، E حرك كلمة المؤشر بالكلمة. ب، ه نقل كلمة المؤشر عن طريق كلمة (كما هو الحال في السادس). قم بتمرير CU و CD العرض لأعلى / لأسفل حسب الكمية المحددة من الخطوط مع الحفاظ على موضع المؤشر. (الافتراضي: نصف شاشة كاملة). CB و CF قم بتمرير العرض لأعلى على الشاشة G يتحرك إلى بداية المخزن المؤقت. يقفز٪ إلى النسبة المئوية المحددة من المخزن المؤقت....البحث عن: / السادس مثل البحث إلى الأمام. ب VI - البحث عن الوراء إلى الوراء. CA S EMACS Style البحث الإضافي للأمام. CR EMACS نمط عكس i-بحث.

لذلك إذا غيرنا stuff خط أعلاه

stuff "Bw Ebe "

سوف ينتقل إلى بداية المسار، لكنه سيتضمن أيضا أي خردة غير بيضاء جاء قبل المسار. طالما طالما أن جميع مساراتك محددة (على كلا الجانبين) يجب أن يعمل هذا.

فعلا

stuff "B//^M E?/^Me "

يبدو أن يعمل بشكل جيد إلى حد ما، لأن هذا يستخدم البحث عن العثور على الأول والأخير / (اكتب ال ^M في VIM عن طريق ضرب Ctrl-V، ثم أدخل). لم أختبر كل حالات الحافة، ولكن يبدو أن العمل من أجل:

 / A / المسار # / A / PATH / A / PATH #

ومع ذلك، سوف تفشل في

 أ / نسبي / المسار

نصائح أخرى

أنا لا أعرف vim جيدة جدا، ولكن مع عدد قليل من الأوامر يجب أن يتم بسهولة. عندما يكون لديك بالفعل اسم ملف في pastebuffer الخاص بك، يمكنك استخدام هذه الأوامر المفيدة:

^A : writebuf /tmp/.screenpomfile
^A : exec vim parameters

أنا لا أعرف كيفية صنع vim قراءة اسم الملف من الملف (أعتقد أنه من الممكن)، ولكن يمكنك ذلك :exec البرنامج النصي الخاص بك مكتوبة في قذيفة قادرة على تحليل `expr `التعبيرات:

#!/bin/sh
vim `cat /tmp/.screenpomfile`

في وقت لاحق يمكنك ربط مفاتيحك الخاصة بهذه الإجراءات، واستخدامها بشكل فعال تماما.

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