it-swarm.asia

كيفية جعل لصق vim من (ونسخ إلى) حافظة النظام؟

على عكس المحررين الآخرين ، يخزن vim النص المنسوخ في الحافظة الخاصة به. لذلك ، يصعب علي نسخ بعض النصوص من صفحة ويب ولصقها في ملف العمل الحالي. يحدث لذلك يجب علي إما فتح gedit أو كتابته يدويًا.

هل يمكنني عمل لصق vim من وإلى حافظة النظام؟

673
Santosh Kumar

سجلات "* و "+ مخصصة لحافظة النظام (:help registers). حسب نظامك ، قد يفعلون أشياء مختلفة. على سبيل المثال ، في الأنظمة التي لا تستخدم X11 مثل OSX أو Windows ، يتم استخدام سجل "* لقراءة وكتابة حافظة النظام. على أنظمة X11 يمكن استخدام كلا السجلين. راجع :help x11-selection للحصول على مزيد من التفاصيل ، ولكن في الأساس "* مماثل لـ X11 التحديد الأساسي (الذي عادةً ما ينسخ الأشياء التي تحددها باستخدام الماوس ويلصقها مع زر الماوس الأوسط) و "+ يشبهان X11 الحافظة التحديد (وهو الحافظة المناسبة).

إذا تجاوز كل ذلك رأسك ، فحاول استخدام "*yy أو "+yy لنسخ خط إلى حافظة نظامك. على افتراض أن لديك خيارات الترجمة المناسبة ، يجب أن يعمل واحد أو الآخر. قد ترغب في إعادة توجيه هذا إلى شيء أكثر ملاءمة لك. على سبيل المثال ، يمكنك وضع vnoremap <C-c> "*y في ~/.vimrc الخاص بك بحيث يمكنك تحديد بصريًا والضغط عليه Ctrl+c ليخرج إلى حافظة النظام الخاص بك.

انتبه إلى أن النسخ/اللصق من حافظة النظام لن ينجح إذا :echo has('clipboard') تُرجع 0. في هذه الحالة ، لا يتم تجميع vim مع ميزة +clipboard وعليك تثبيت إصدار مختلف أو إعادة ترجمته . توفر بعض وحدات linux distros تثبيتًا بسيطًا بشكل افتراضي ، ولكن بشكل عام إذا كنت تثبيت الحزمة vim-gtk أو vim-gtk3 يمكنك الحصول على الميزات الإضافية.

قد ترغب أيضًا في إلقاء نظرة على خيار 'clipboard' الموضح في :help cb. في هذه الحالة ، يمكنك :set clipboard=unnamed أو :set clipboard=unnamedplus لجعل جميع عمليات حذف/حذف النسخ تلقائيًا إلى حافظة النظام. قد يكون هذا إزعاجًا في بعض الحالات حيث تخزن شيئًا آخر في الحافظة لأنه سيتجاوزه.

للصق ، يمكنك استخدام "+p أو "*p (مرة أخرى ، وفقًا لنظامك و/أو التحديد الذي تريده) أو يمكنك تعيينها إلى شيء آخر. أنا اكتبها بشكل صريح ، لكن غالبًا ما أجد نفسي في وضع الإدراج. إذا كنت في وضع الإدراج ، فلا يزال بإمكانك لصقها بمسافة بادئة باستخدام <C-r><C-p>* أو <C-r><C-p>+. انظر :help i_CTRL-R_CTRL-P.

تجدر الإشارة أيضًا إلى خيار paste الخاص بـ vim (:help paste). هذا يضع vim في "وضع لصق" خاص يعطل العديد من الخيارات الأخرى ، مما يتيح لك لصقها بسهولة في vim باستخدام محاكي الجهاز الطرفي أو اختصار لصق الرسائل المعتادة. ببساطة اكتب :set paste لتمكينه ، الصق المحتوى الخاص بك ثم اكتب :set nopaste لتعطيله. بدلاً من ذلك ، يمكنك استخدام الخيار pastetoggle لتعيين رمز مفتاح يبدل الوضع (:help pastetoggle). أوصي باستخدام السجلات بدلاً من هذه الخيارات ، لكن إذا كانت لا تزال مخيفة جدًا ، فقد يكون هذا حلًا مناسبًا أثناء قيامك بإتقان شرائح القطع الحيوية.

انظر :help clipboard لمزيد من المعلومات التفصيلية.

793
Conner

يمكنك نسخ إلى vim بواسطة اختصار محطة جنوم للصقها. جعل الملف في وضع الإدراج واستخدامها

Ctrl.Shiftبعض __code__v.

Remember beforehand to

 :set paste 

to avoid messing with the indentation.

126
neel

لبلدي هذا التكوين يعمل للنسخ واللصق

" copy and paste
vmap <C-c> "+yi
vmap <C-x> "+c
vmap <C-v> c<ESC>"+p
imap <C-v> <ESC>"+pa
38
lis2

لينكس

على نظام Linux الخاص بي ، يسجل + و * خريطة لتحديد X11 ، والذي يمكن لصقه باستخدام زر الماوس الأوسط. عند استخدام :set clipboard=unnamed و :set clipboard=unnamedplus ، يتم بعد ذلك تعيين السجلات إلى الحافظة ، ويمكن لصقها باستخدام CTRL-V.

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

أنظر أيضا

http://vim.wikia.com/wiki/Accessing_the_system_clipboard

37
Todd A. Jacobs

هذا سيكون الخطوط التي تحتاجها في vimrc لهذا الغرض:

set clipboard+=unnamed  " use the clipboards of vim and win
set paste               " Paste from a windows or from vim
set go+=a               " Visual selection automatically copied to the clipboard
33
Danniel Little

أعتقد أن هذا السؤال يستحق إجابة أكثر موضوعية.

الدخول إلى وضع لصق

  • ESC
  • : تعيين لصق
  • صحافة i
  • SHIFT + Insert (مع نسخ النص على الحافظة الخاصة بك)


ترك وضع لصق

  • ESC
  • : تعيين nopaste
  • صحافة i

لقد قمت بلصق النص وستتمكن من الكتابة مرة أخرى.

19
ivanleoncz

الحافظة

يوجد سجل خاص لتخزين هذا الاختيار ، وهو "* التسجيل. لا يتم وضع أي شيء هنا ما لم تكن المعلومات حول النص المحدد على وشك التغيير (على سبيل المثال ، بالنقر بزر الماوس الأيسر في مكان ما) ، أو عندما يريد تطبيق آخر الصق النص المحدد ، ثم يتم وضع النص في "* التسجيل. على سبيل المثال ، لقص سطر وجعله التحديد الحالي/وضعه على CLIPBOARD:

    "*dd

وبالمثل ، عندما تريد لصق تحديد من تطبيق آخر ، على سبيل المثال ، عن طريق النقر فوق زر الماوس الأوسط ، يتم وضع التحديد في "* التسجيل أولاً ، ثم" وضع "مثل أي سجل آخر. على سبيل المثال ، لوضع التحديد (محتويات لوحة CLIPBOARD):

    "*p

السجلاتE354

> There are nine types of registers:                      
> 1. The unnamed register ""
> 2. 10 numbered registers "0 to "9
> 3. The small delete register "-
> 4. 26 named registers "a to "z or "A to "Z
> 5. four read-only registers ":, "., "% and "#
> 6. the expression register "=
> 7. The selection and drop registers "*, "+ and "~ 
> 8. The black hole register "_
> 9. Last search pattern register "/

لصق من الحافظة

1. Clipboard: Copy
2. Vim insertmode, middle mouse key

التحقق من وجود دعم الحافظة X11 في المحطة

عندما ترغب في تشغيل Vim في محطة ، تحتاج إلى البحث عن إصدار من Vim تم تجميعه بدعم الحافظة. تحقق من وجود دعم الحافظة X11 ، من وحدة التحكم ، اكتب:

% vim --version

إذا رأيت "+ xterm_clipboard" ، فأنت على ما يرام.

http://vim.wikia.com/wiki/Accessing_the_system_clipboard

يحتفظ خادم X بثلاثة اختيارات ، تسمى:

الابتدائية والثانوية ولوحة المفاتيح

يستخدم اختيار PRIMARY بشكل تقليدي لتنفيذ النسخ واللصق عبر زر الماوس الأوسط. يتم استخدام التحديدات الثانوية و CLIPBOARD بشكل أقل تواتراً بواسطة برامج التطبيق.

http://linux.die.net/man/1/xsel

16
The Demz

جربت الاقتراحات أعلاه ولم يعمل أي منها في بيئتي. (Windows PuTTY clone over ssh)

ظهرت بعض googling الإضافية: https://unix.stackexchange.com/questions/110684/copy-paste-into-sshd-vim-from-local-windows-clipboard

اقترح أحد التعليقات استخدام SHIFT+INSERT الذي قام بخدعة اللصق من حافظة سطح المكتب إلى مخزن Vim المؤقت. Ctrl-C كان يعمل بالفعل للنسخ إلى حافظة سطح المكتب من Vim.

12
jinksPadlock

لم يكن لديك حافظة + لذا فقد توصلت إلى هذا الحل البديل باستخدام xsel:

أضف إلى ~/.vimrc الخاص بك:

vnoremap <C-C> :w !xsel -b<CR><CR>

9
rotestein

ملاحظة سريعة للأشخاص الذين لا يدعم تثبيت vim سجلات * و +. ليس من الضروري تنزيل تثبيت vim جديد للصقه من الحافظة. إليك طريقة بديلة:

1) تثبيت parcellite (مدير الحافظة مع انخفاض مساحة الذاكرة) ؛

2) في ملف .vimrc الخاص بك ، أضف ما يلي:

command Clip r !parcellite -c

3) إعادة تشغيل vim.

الآن عند الكتابة في: Clip كأمر ex ، سيتم لصق محتويات الحافظة في المؤشر. يمكنك أيضًا تعيين الأمر الجديد إلى مفتاح وظيفة حتى تتمكن من القيام بذلك بضغطة واحدة.

6
lovecraftian

هذا يعمل لي: Ctrl+Shift+V

3
Boseam

المتابعة من إجابة Conner ، والتي كانت رائعة ، ولكن C-R C-p + و C-R C-p * في وضع الإدراج غير مريحة بعض الشيء. كما سبق "*p و "+p من وضع الأوامر.

اقترح VIM guru ما يلي لتعيين C-v لما يفعله C-r C-p +.

يمكن أن يكون لديك :inoremap <C-v> <C-o>"+p لوضع الإدراج فقط

إذا كنت تريد حقًا تجاوز الوضع البصري block Block (غير موصى به من قِبله لأن الوضع المرئي جيد) فيمكنك الحصول على map <C-v> "+p

2
barlop

إن أبسط الحلول لذلك ، والذي يعمل أيضًا بين أجهزة Linux المختلفة من خلال ssh هو:

  1. تحقق ما إذا كان vim يدعم X-11 الحافظة: vim --version | grep clipboard. إذا تم الإبلاغ عن -clipboard و -xterm_clipboard ، فيجب عليك إما تثبيت vim-gtk أو vim-gnome (gvim على Arch Linux)

  2. أضف الأسطر التالية إلى .vimrc:

set clipboard=unnamedplus
set paste
  1. إذا قمت بتسجيل الدخول على جهاز مختلف عبر ssh ، استخدم الخيار -Y: ssh -Y machine

الآن يجب أن تعمل النسخ واللصق تمامًا كما هو متوقع على جهاز واحد ، وعبر أجهزة مختلفة فقط باستخدام y for yank و p للصق. NB قم بتعديل .vimrc على جميع الأجهزة التي تريد استخدام هذه الميزة فيها.

1
chao

بناءً على إجابة @ lis2 ، أستخدم تكوينًا أبسط لن يفرض وضع الإدراج في النهاية:

" Copy and paste
if has('clipboard') && !has('gui_running')
  vnoremap <C-c> "+y
  vnoremap <C-x> "+d
  vnoremap <C-v> "+p
  inoremap <C-v> <C-r><C-o>+
endif

ضع في اعتبارك أن كل هذه التجاوزات تعيينات Vim الافتراضية:

  • v_CTRL-C : توقف الوضع المرئي
  • v_CTRL-X : طرح [العد] من الرقم
  • v_CTRL-V : وضع مرئي blockwise
  • i_CTRL-V : أدخل الحرف التالي غير المكون من رقم ، والذي تم تعيينه أيضًا إلى i_CTRL-Q

كبديل ، يمكن استخدام مفاتيح مستوحاة من "yank" و "delete" و "put" أفعال Vim: <C-y> و <C-d> و <C-p> على التوالي. هذه ستتجاوز التعيين الافتراضي واحد فقط:

  • i_CTRL-P : البحث عن الكلمات الأساسية للخلف للإكمال
1
ericbn

في الجزء العلوي من الإعداد :set clipboard=unnamed ، يجب عليك استخدام mvim -v الذي يمكنك الحصول عليه مع brew install macvim إذا كنت تستخدم vim على Terminal.app على Mac OS X 10.9. vim الافتراضي لا يدعم خيار الحافظة.

1
Nobu

ما تحتاجه حقًا هو EasyClip . وسوف تفعل ذلك تماما وأكثر من ذلك بكثير ...

1
Scott Wade

قد يكون من الجدير بالذكر أيضًا ، على OSX باستخدام Vim ، يمكنك تحديد نص باستخدام الماوس ، Cmd-C لنسخه إلى حافظة نظام OSX ، وسيكون النص المنسوخ متاحًا في الحافظة خارج Vim.

بمعنى آخر ، يعامل OSX الأمر كما لو كان نافذة عادية ، وهذا هو المكان الذي يكون فيه زر Apple "Command" الخبيث للغاية سهل الاستخدام.

B-30

1
B-30

إذا كنت تستخدم vim في MAC OSX ، لسوء الحظ ، فإنه يأتي مع verion الأقدم ، ولا يتوافق مع خيارات الحافظة. لحسن الحظ ، يمكن بسهولة البيرة حل هذه المشكلة.

تثبيت vim:

brew install vim --with-lua --with-override-system-vim

تثبيت واجهة المستخدم الرسومية verion vim:

brew install macvim --with-lua --with-override-system-vim

أعد تشغيل الجهاز لتفعيله.


إلحاق السطر التالي بـ ~/.vimrc
set clipboard=unnamed

الآن يمكنك نسخ السطر في vim مع yy ولصقه على مستوى النظام.

1
anonymous

بالنسبة لبعض لوحات المفاتيح الدولية ، قد تحتاج إلى الضغط "+Space للحصول على ".

لذلك في هذه الحالة سيكون عليك الضغط "Space+y أو "Space*y لنسخ.

و "Space+p أو "Space*p لصق.

0
Arthur F

إذا كنت تستخدم الماوس أولا

 :set paste 

ثم right click mouse وسيتم لصق المحتويات في المخزن المؤقت

0
Mohammed Rafeeq

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

  • حدد النص الذي تريد نسخه مع الوضع المرئي v
  • اضغط على : (سيتم توسيعه تلقائيًا لعرض :'<,'>)
  • اكتب y * أو y + (حسب نظامك) لإلغاء النص المحدد إلى حافظة النظام
0
NateW

هناك طريقتان بسيطتان للقيام بذلك. اجعل الملف في وضع الإدراج و 1) اضغط على الزر الأوسط (بكرة التمرير) في الماوس ، أو 2) Ctrl + Shift + V

0
user1898814

عندما أستخدم vimian debian غير المتكامل مع Gnome (vim --version | grep clip # لا يُظهر أي دعم للحافظة) ، يمكنني النسخ إلى الحافظة بعد الضغط على مفتاح Shift وتحديد النص باستخدام الماوس ، تمامًا مثل أي برنامج الشتائم الأخرى. كما أحسبت من تعليق بواسطةConner ، فإن الجهاز الطرفي (gnome-terminal في حالتي) هو الذي يوقف الإبلاغ عن أحداث الماوس عندما يستشعر مكبس Shift. أعتقد أن البرامج المستندة إلى اللعنات يمكنها تلقي أحداث الماوس بعد إرسال تسلسل Escape معين إلى الجهاز الطرفي.

0
eel ghEEz

بما أن vim 8 فإن النقر بزر الماوس الأيمن يمكّن الوضع المرئي افتراضيًا. هذا يمنع النسخ واللصق "العاديين" (نسميها "عيبًا حسب التصميم" https://github.com/vim/vim/issues/1326 ). إصلاحه عن طريق القيام:

echo "set mouse-=a" >> ~/.vimrc.

الخروج وإعادة vim.

0
dr0i

إذا كنت تستخدم نظام التشغيل windows وتريد لصق محتويات حافظة النظام باستخدام p ، فاكتب هذا الأمر.

:set clipboard = unnamed

هذا حل مشكلتي.

0
vincent mathew