على عكس المحررين الآخرين ، يخزن vim النص المنسوخ في الحافظة الخاصة به. لذلك ، يصعب علي نسخ بعض النصوص من صفحة ويب ولصقها في ملف العمل الحالي. يحدث لذلك يجب علي إما فتح gedit أو كتابته يدويًا.
هل يمكنني عمل لصق vim من وإلى حافظة النظام؟
سجلات "*
و "+
مخصصة لحافظة النظام (: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
لمزيد من المعلومات التفصيلية.
يمكنك نسخ إلى vim بواسطة اختصار محطة جنوم للصقها. جعل الملف في وضع الإدراج واستخدامها
Ctrl.Shiftبعض __code__v.
Remember beforehand to
:set paste
to avoid messing with the indentation.
لبلدي هذا التكوين يعمل للنسخ واللصق
" copy and paste
vmap <C-c> "+yi
vmap <C-x> "+c
vmap <C-v> c<ESC>"+p
imap <C-v> <ESC>"+pa
على نظام Linux الخاص بي ، يسجل +
و *
خريطة لتحديد X11 ، والذي يمكن لصقه باستخدام زر الماوس الأوسط. عند استخدام :set clipboard=unnamed
و :set clipboard=unnamedplus
، يتم بعد ذلك تعيين السجلات إلى الحافظة ، ويمكن لصقها باستخدام CTRL-V.
يبدو أن المواصفات تعتمد إلى حدٍ ما على النظام وتعتمد على النظام ، لذلك ستختلف المسافة المقطوعة بالتأكيد. من المؤكد أنه يجب أن تكون قد أشرت في الاتجاه الصحيح.
هذا سيكون الخطوط التي تحتاجها في 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
أعتقد أن هذا السؤال يستحق إجابة أكثر موضوعية.
الدخول إلى وضع لصق
ترك وضع لصق
لقد قمت بلصق النص وستتمكن من الكتابة مرة أخرى.
الحافظة
يوجد سجل خاص لتخزين هذا الاختيار ، وهو "* التسجيل. لا يتم وضع أي شيء هنا ما لم تكن المعلومات حول النص المحدد على وشك التغيير (على سبيل المثال ، بالنقر بزر الماوس الأيسر في مكان ما) ، أو عندما يريد تطبيق آخر الصق النص المحدد ، ثم يتم وضع النص في "* التسجيل. على سبيل المثال ، لقص سطر وجعله التحديد الحالي/وضعه على 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 بشكل أقل تواتراً بواسطة برامج التطبيق.
جربت الاقتراحات أعلاه ولم يعمل أي منها في بيئتي. (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.
لم يكن لديك حافظة + لذا فقد توصلت إلى هذا الحل البديل باستخدام xsel:
أضف إلى ~/.vimrc الخاص بك:
vnoremap <C-C> :w !xsel -b<CR><CR>
ملاحظة سريعة للأشخاص الذين لا يدعم تثبيت vim سجلات * و +. ليس من الضروري تنزيل تثبيت vim جديد للصقه من الحافظة. إليك طريقة بديلة:
1) تثبيت parcellite (مدير الحافظة مع انخفاض مساحة الذاكرة) ؛
2) في ملف .vimrc الخاص بك ، أضف ما يلي:
command Clip r !parcellite -c
3) إعادة تشغيل vim.
الآن عند الكتابة في: Clip كأمر ex ، سيتم لصق محتويات الحافظة في المؤشر. يمكنك أيضًا تعيين الأمر الجديد إلى مفتاح وظيفة حتى تتمكن من القيام بذلك بضغطة واحدة.
هذا يعمل لي: Ctrl+Shift+V
المتابعة من إجابة 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
إن أبسط الحلول لذلك ، والذي يعمل أيضًا بين أجهزة Linux المختلفة من خلال ssh
هو:
تحقق ما إذا كان vim يدعم X-11 الحافظة: vim --version | grep clipboard
. إذا تم الإبلاغ عن -clipboard
و -xterm_clipboard
، فيجب عليك إما تثبيت vim-gtk
أو vim-gnome
(gvim على Arch Linux)
أضف الأسطر التالية إلى .vimrc
:
set clipboard=unnamedplus set paste
ssh -Y machine
الآن يجب أن تعمل النسخ واللصق تمامًا كما هو متوقع على جهاز واحد ، وعبر أجهزة مختلفة فقط باستخدام y
for yank و p
للصق. NB قم بتعديل .vimrc
على جميع الأجهزة التي تريد استخدام هذه الميزة فيها.
بناءً على إجابة @ 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
: وضع مرئي blockwisei_CTRL-V
: أدخل الحرف التالي غير المكون من رقم ، والذي تم تعيينه أيضًا إلى i_CTRL-Q
كبديل ، يمكن استخدام مفاتيح مستوحاة من "yank" و "delete" و "put" أفعال Vim: <C-y>
و <C-d>
و <C-p>
على التوالي. هذه ستتجاوز التعيين الافتراضي واحد فقط:
i_CTRL-P
: البحث عن الكلمات الأساسية للخلف للإكمالفي الجزء العلوي من الإعداد :set clipboard=unnamed
، يجب عليك استخدام mvim -v
الذي يمكنك الحصول عليه مع brew install macvim
إذا كنت تستخدم vim على Terminal.app على Mac OS X 10.9. vim الافتراضي لا يدعم خيار الحافظة.
ما تحتاجه حقًا هو EasyClip . وسوف تفعل ذلك تماما وأكثر من ذلك بكثير ...
قد يكون من الجدير بالذكر أيضًا ، على OSX باستخدام Vim ، يمكنك تحديد نص باستخدام الماوس ، Cmd-C لنسخه إلى حافظة نظام OSX ، وسيكون النص المنسوخ متاحًا في الحافظة خارج Vim.
بمعنى آخر ، يعامل OSX الأمر كما لو كان نافذة عادية ، وهذا هو المكان الذي يكون فيه زر Apple "Command" الخبيث للغاية سهل الاستخدام.
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
ولصقه على مستوى النظام.
بالنسبة لبعض لوحات المفاتيح الدولية ، قد تحتاج إلى الضغط "+Space للحصول على "
.
لذلك في هذه الحالة سيكون عليك الضغط "Space+y أو "Space*y لنسخ.
و "Space+p أو "Space*p لصق.
إذا كنت تستخدم الماوس أولا
:set paste
ثم right click mouse
وسيتم لصق المحتويات في المخزن المؤقت
الحلول الأخرى جيدة إذا كنت ترغب في تغيير vimrc ، وما إلى ذلك ... ومع ذلك أردت طريقة بسيطة لنسخ من vim إلى نظامي لوحة المفاتيح. هذا هو ما خطرت لي.
v
:
(سيتم توسيعه تلقائيًا لعرض :'<,'>
)y *
أو y +
(حسب نظامك) لإلغاء النص المحدد إلى حافظة النظامهناك طريقتان بسيطتان للقيام بذلك. اجعل الملف في وضع الإدراج و 1) اضغط على الزر الأوسط (بكرة التمرير) في الماوس ، أو 2) Ctrl + Shift + V
عندما أستخدم vimian debian غير المتكامل مع Gnome (vim --version | grep clip # لا يُظهر أي دعم للحافظة) ، يمكنني النسخ إلى الحافظة بعد الضغط على مفتاح Shift وتحديد النص باستخدام الماوس ، تمامًا مثل أي برنامج الشتائم الأخرى. كما أحسبت من تعليق بواسطةConner ، فإن الجهاز الطرفي (gnome-terminal في حالتي) هو الذي يوقف الإبلاغ عن أحداث الماوس عندما يستشعر مكبس Shift. أعتقد أن البرامج المستندة إلى اللعنات يمكنها تلقي أحداث الماوس بعد إرسال تسلسل Escape معين إلى الجهاز الطرفي.
بما أن vim 8 فإن النقر بزر الماوس الأيمن يمكّن الوضع المرئي افتراضيًا. هذا يمنع النسخ واللصق "العاديين" (نسميها "عيبًا حسب التصميم" https://github.com/vim/vim/issues/1326 ). إصلاحه عن طريق القيام:
echo "set mouse-=a" >> ~/.vimrc
.
الخروج وإعادة vim.
إذا كنت تستخدم نظام التشغيل windows وتريد لصق محتويات حافظة النظام باستخدام p
، فاكتب هذا الأمر.
:set clipboard = unnamed
هذا حل مشكلتي.