কেন ভিম ইনডেন্ট ভুলভাবে কোড পেস্ট করেছে?


100

ভিমে, আমি যদি এই স্ক্রিপ্টটি পেস্ট করি:

#!/bin/sh
VAR=1
while ((VAR <  10))
    do
        echo "VAR1 is now $VAR"
        ((VAR = VAR +2))
    done
    echo "finish"

আমি এই বিচিত্র ফলাফলগুলি পেয়েছি:

#!/bin/sh
#VAR=1
#while ((VAR <  10))
#       do
#                       echo "VAR1 is now $VAR"
#                                       ((VAR = VAR +2))
#                                               done
#                                                       echo "finish"
#                                                       

হ্যাশ লক্ষণ (#) এবং ট্যাব উপস্থিত হয়েছে। কেন?


31
এটি vi.stackex بدل.com এর জন্য আরও ভাল প্রশ্ন হতে পারে
এরিক

@ এরিকরেনউফ কেন? (সৎ প্রশ্ন)
কিউস

3
@qix আমার চিন্তা কিভাবে এই তেজ কাজ সম্পর্কে একটি প্রশ্ন, যা * স্নো ব্যবহৃত হতে পারে একটি সাধারণ টুল হল ছিল, কিন্তু * স্নো না তেজ ব্যবহার করার জন্য একটা চাহিদা,
এরিক Renouf

1
@ জ্যারেডবুরোস আমি নিশ্চিত আশা করি এটি এটি করেছে
এরিক রেনৌফ

1
আপনি কীভাবে পেস্টটি ট্রিগার করছেন? মাউস দিয়ে?
বেন ভয়েগট

উত্তর:


122

এর দুটি কারণ রয়েছে:

vimঅটো-ইনডেন্ট সক্ষম থাকা অবস্থায় আটকানোর জন্য , আপনাকে টাইপ করে পেস্ট মোডে পরিবর্তন করতে হবে :

:set paste

তারপরে আপনি সন্নিবেশ মোডে পরিবর্তন করতে পারেন এবং আপনার কোড পেস্ট করতে পারেন। আটকানো শেষ হয়ে গেলে টাইপ করুন:

:set nopaste

পেস্ট মোড বন্ধ করতে। যেহেতু এটি একটি সাধারণ এবং ঘন ঘন ক্রিয়া, vimটগলিং পেস্ট মোডের প্রস্তাব দেয়:

set pastetoggle=<F2>

আপনি F2যে কী চান তাতে পরিবর্তন করতে পারেন এবং এখন আপনি সহজেই পেস্টিং চালু এবং বন্ধ করতে পারেন।


মন্তব্যগুলির স্বতঃ-সন্নিবেশ বন্ধ করতে, আপনি এই লাইনগুলি আপনার ভিমিকআরসিতে যুক্ত করতে পারেন :

augroup auto_comment
    au!
    au FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=o
augroup END

vimসিস্টেম ক্লিপবোর্ড থেকে পাঠ্য আটকানোর জন্য একটি পাস্টিং রেজিস্টারও সরবরাহ করে । আপনি আপনার সিস্টেমে ব্যবহার "*pবা "+pনির্ভর করতে পারেন । এক্স 11 বিহীন সিস্টেমে যেমন ওএসএক্স বা উইন্ডোজ আপনাকে *রেজিস্টারটি ব্যবহার করতে হবে । লিনাক্সের মতো একটি এক্স 11 সিস্টেমে আপনি উভয়ই ব্যবহার করতে পারেন।

আরও পড়া


2
আমি ভিমকে চিরকাল ব্যবহার করে আসছি এবং এই সম্পর্কে কখনই জানতাম না। অনেক ধন্যবাদ.
কাজা

বেশিরভাগ আধুনিক গ্রাফিকাল টার্মিনাল এমুলেটরগুলি "বন্ধনীযুক্ত পেস্ট মোড" নামে একটি বৈশিষ্ট্য সমর্থন করে। ভিম টার্মিনালটিকে এই মোডটি সক্ষম করতে বলতে পারে, যা পরিবর্তিতভাবে নির্দিষ্ট পালানোর ক্রম সহ আটকানো পাঠ্যকে ঘিরে রাখে। ভিম এটি সনাক্ত করতে পারে এবং পেস্টের সময়কালের জন্য মোড়ক / ইনডেন্টিং বন্ধ করতে পারে। দীর্ঘ গল্পের স্টোর: আটকানো "প্রত্যাশার মতো কাজ করবে"। আমি কোনও ভিএম ব্যবহারকারী নই, তবে একটি দ্রুত ওয়েবসার্ক আপনাকে এই মোডটি কীভাবে কনফিগার করবেন তা নিশ্চিতভাবেই আপনাকে জানাবে।
egmont

2
@MichaelDurrant set pasteআপনার vimrc কখনো হওয়া উচিত। এটি মোড ম্যাপিংস, কমান্ড লাইন ম্যাপিংস, সংক্ষিপ্তকরণগুলি, পাঠ্যপুথ, র্যাপমার্গিন, অটোইন্ডেন্ট, স্মার্টইডেন্ট, সফ্টব্যাবস্টপ, ফর্ম্যাটপশন, ইনডেনটেক্সার্প এবং আরও কয়েকটি সংখ্যক সহ অনেক কিছু অক্ষম করে বা পুনরায় সেট করে। :h pasteপুরো তালিকা আছে। বেশিরভাগ লোকেরা এই কিছু বা সমস্ত জিনিস ব্যবহার করে এবং কেন সেটিংস উপেক্ষা করা হয় তা অবাক করে।
এফডিনফ

4
আমি সাধারণত :r!catভার্ব্যাটিম পেস্ট করতে ব্যবহার করি ।
সাইমন রিখটার

1
এটির সাথে ইন্টারঅ্যাকশনটি আলোচনার জন্য উপযুক্ত হতে পারে set mouse, যা মাউস ক্লিকের সাথে আটকানোর সময় পেস্ট মোডটি স্বয়ংক্রিয়ভাবে প্রবেশ করতে এবং ছেড়ে দিতে পারে।
বেন ভয়েগট

36

ভিম পেস্ট ব্যবহার করুন। আপনি যা চান তা হ'ল ক্লিপবোর্ড বাফারে যা আছে তা পেস্ট করা "+p

এটি নির্বাচন করে +এবং এটি জায়গায় আটকে দেয়।

আপনি যদি লিনাক্স ব্যবহার করেন *তবে এটি কি এক্স / মিডল-ক্লিক বাফার (সর্বশেষ নির্বাচিত পাঠ্য)।

তাহলে ভিম জানে এটি একটি পেস্ট paste

অন্যথায় ভিম মনে করে যে আপনি কীগুলি আটকানো হচ্ছে তা টাইপ করেছেন এবং এটির পেস্টের শেষ পর্যন্ত নিজের অটো-ইন্ডেন্টেশন (আপনার অনুলিপি করা ইন্ডেন্টেশনের শীর্ষে) করে।

এসএসএইচ দিয়ে কাজ করার জন্য এটি হিসাবে একটি নোট হিসাবে আপনার ক্লিপবোর্ডটি ভাগ করে নেওয়ার জন্য বিকল্পটি সেট করতে হবে -Y

দেখুন man sshআরো বিস্তারিত জানার জন্য।


4
এটি আসলে সঠিক উত্তর
ইমো

দেখে মনে হচ্ছে এটি কেবল গ্রাফিকাল ভিম ( gvim) এর জন্য কাজ করে ; টার্মিনাল এমুলেটরটিতে চলমান
ভিএম

আমি gvim ব্যবহার করি না, কেবলমাত্র টার্মিনাল vim। আপনার মাউস সেটিং কি? আমার মাউস সেটিং সি। মাউস নির্বাচনের অনুমতি দেওয়া হলে এটি কীভাবে কাজ করে তা নিশ্চিত নয়। set mouse?
exussum

2
vim --versionক্লিপবোর্ড সমর্থন সহ এটি সংকলিত হয়েছে কিনা তা পরীক্ষা করে +xterm_clipboard
দেখুনও

@ উর্টেল: সম্ভবত আপনি unnamedস্ট্রিং সহ ক্লিপবোর্ড সেট করেছেন ।
cuonglm

8

ট্যাবগুলি সন্নিবেশ করা হয়েছে কারণ আপনি স্বয়ংক্রিয় চালু করেছেন এবং :set noaiটার্মিনালটিতে আটকানোর আগে আপনি স্বয়ংচালিত ( ) বন্ধ করে সেই আচরণটি অক্ষম করতে পারেন ।

মন্তব্য করা লাইনগুলি স্বয়ংক্রিয় মন্তব্য দ্বারা উত্পাদিত হয় এবং এটি বন্ধ করে অক্ষম করা যায়।

:set pasteআপনার ফর্ম্যাট কোডটি আটকানো এবং :set nopasteস্বাভাবিক আচরণ পুনরুদ্ধার করার জন্য টগলগুলি ব্যবহার করে আপনার পছন্দসই আচরণ করা উচিত তাদের বিকল্প ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.