আমি কীভাবে একটি লাইনব্রেক সন্নিবেশ করব যেখানে ভার্সায় sertোকানো মোডে প্রবেশ না করে কার্সারটি রয়েছে?


89

সন্নিবেশ মোডে প্রবেশ না করে যেখানে কার্সার ভিমে থাকে সেখানে লাইন ব্রেক breakোকানো সম্ভব? এখানে একটি উদাহরণ রয়েছে ( [x]যার অর্থ কার্সার চালু রয়েছে x):

if (some_condition) {[ ]return; }

মাঝে মাঝে, আমি আরও কিছু কোড প্রবেশ করতে চাই। সুতরাং আমি iসন্নিবেশ মোডে Enterপ্রবেশ করতে টিপতাম, লাইন ব্রেকটি সন্নিবেশ করতে টিপুন এবং তারপরে অতিরিক্ত স্থানটি মুছুন। এর পরে, আমি স্বাভাবিক মোডে প্রবেশ করতাম এবং বন্ধনী বন্ধনীটির আগে কার্সারটি অবস্থান করতাম এবং তারপরে এটি নিজের লাইনে পাওয়ার জন্য একই কাজ করতাম।

আমি এটি কিছুক্ষণ করছি, তবে এটি করার আরও ভাল উপায় নিশ্চয়ই আছে?


আপনি ইনসার্ট মোডে না গিয়ে কিছু inোকাতে চান?
জেরেমি ক্যান্ট্রেল

26
@ জেরেমি-ক্যান্ট্রেল হ্যাঁ, ঠিক "জে" পরের লাইনে যোগ দেয় এবং ইনসার্ট মোডে না গিয়ে একটি শ্বেত স্পেস প্রবেশ করায়!
এভেন্ডেট

উত্তর:


108

আপনি যে উদাহরণ দিয়েছেন তার উদাহরণস্বরূপ, আপনি rEnterএকটি একক অক্ষর (স্থান) এন্টার সহ প্রতিস্থাপন করতে পারেন । তারপরে, fspace.পরবর্তী স্পেসে এগিয়ে যেতে এবং শেষ কমান্ডটি পুনরাবৃত্তি করুন।

আপনার অটোইডেন্ট সেটিংসের উপর নির্ভর করে উপরেরগুলি সঠিকভাবে রিটার্নের স্টেটমেন্টটি ইন্ডেন্ট করতে পারে বা নাও পারে। যদি তা না হয়, তবে sEnterTabEscপরিবর্তে নতুন লাইনের সাথে স্থানটি প্রতিস্থাপন করতে, লাইনটি ইনডেন্ট করুন এবং সন্নিবেশ মোডে প্রস্থান করুন। আপনাকে দ্বিতীয় স্থানটি একটি আলাদা কমান্ডের সাথে প্রতিস্থাপন করতে হবে যাতে আপনি ব্যবহার করতে না পারেন। ' এক্ষেত্রে.


4
আমি মনে করি এটিই সবচেয়ে সহজ সমাধান। ধন্যবাদ গ্রেগ
মার্ক এ নিকোলোসি

4
'f [স্পেস]' 'ডাব্লু' এর সমতুল্য হওয়া উচিত (অর্থাত্ পরের হাইটস্পেসে চলে যাওয়া)
নাথান

4
'ডাব্লু' একটি চরিত্রকে অনেক দূরে সরিয়ে দেয়, এটি পরের সাদা অংশের পরে পরবর্তী অক্ষরে চলে আসে ।
গ্রেগ হিউগিল

4
এছাড়াও আপনি ব্যবহার করতে পারে >>এবং <<সাহায্যের ইন্ডেন্টিং যদি আপনার সাথে সন্নিবেশ মোড ঢোকা চাইনি s
কনভেনার

12

Aোকানো মোডে না থাকাকালীন আপনি যখন 'g' টিপেন তখন কার্সারে একটি নিউলাইন সন্নিবেশ করানো যায় এমন ম্যাক্রো কীভাবে তৈরি করবেন তা এখানে :

ভিমের মধ্যে থেকে টাইপ করুন:

:map g i[Ctrl+V][Enter][Ctrl+V][Esc][Enter]

কোথায়:

  • [Ctrl + V] এর অর্থ Ctrl কীটি ধরে রাখা এবং 'v' টিপুন
  • [এন্টার] এর অর্থ এন্টার কী টিপুন
  • [Esc] এর অর্থ Esc কী টিপুন

আপনি চূড়ান্ত এন্টার টিপুন না হওয়া অবধি আপনার ভিআইএম উইন্ডোটির নীচে নিম্নলিখিতগুলি দেখতে পাবেন:

:map g i^M^[

ব্যাখ্যা:

[Ctrl + V] এর অর্থ "নিম্নলিখিত অক্ষরটি উদ্ধৃত করুন" - এটি আপনাকে কমান্ডটিতে নতুন লাইন এম্বেড করতে এবং অক্ষরগুলি থেকে মুক্ত করতে দেয়।

সুতরাং আপনি অনুক্রমের জন্য 'জি' কীটি ম্যাপিং করছেন:

আমি [প্রবেশ করুন] [পালাতে]

এটি কার্সারের আগে একটি নতুন লাইন সন্নিবেশ করানোর জন্য vim , তারপরে সন্নিবেশ মোডে প্রস্থান করুন

টুইটগুলি:

  • আপনি 'জি' কে এমন কোনও অক্ষরের সাথে প্রতিস্থাপন করতে পারেন যা আপনার ব্যবহার করা কমান্ডের সাথে ইতিমধ্যে সংযুক্ত নেই।
  • আরো কমান্ড যোগ করুন যেমন f}i^M^[O - এই করবে IND } এবং আমি অন্য সম্পর্কে newline nsert, তারপর সন্নিবেশ মোড এবং থেকে অব্যাহতি হে কলম আপনি আরো কোড লিখতে জন্য একটি খালি লাইন।
  • এটিকে স্থায়ী করতে আপনি আপনার .vimrc বা .exrc ফাইলটিতে কমান্ডটি যুক্ত করতে পারেন। শুরু থেকে কোলনটি বাদ দিন, সুতরাং কমান্ডটি "মানচিত্র" দিয়ে শুরু হবে

উপভোগ করুন!


আপনি পোস্টে থাকা প্রশ্নের পরিবর্তে বিষয়টিতে খারাপ বর্ণিত প্রশ্নের উত্তর দিয়েছেন। তিনি যা জানতে চান তা হ'ল কীভাবে অন্বেষণ করা যায় যে সাদা অংশটি যে বিন্দুতে লাইনটি তখন ভাঙা হয়েছিল কিন্তু এখন আর কোনও উদ্দেশ্যে কাজ করে না।
অ্যারিস্টটল প্যাগাল্টজিস

ধন্যবাদ লেখক যা অনুরোধ করেছেন (তা আমি মনে করি) তা পূরণ করতে "টুইটস" বিভাগটি আপডেট করেছেন। আমি যখন এটি পরীক্ষা করেছি, vi স্বয়ংক্রিয়ভাবে আমার জন্য অতিরিক্ত স্থান সরিয়ে নিয়েছে; আপনার না হলে এগুলি মুছতে 'x' ব্যবহার করুন। এবং ভিআই কমান্ডগুলি মডেম লাইন শব্দের মতো দেখাচ্ছে কেন? :-)
অ্যাডাম লিস

11

Ctrl + এন্টার টিপে কার্সারে লাইনটি ভাঙার জন্য একটি সাধারণ ম্যাপিং:

:nmap <c-cr> i<cr><Esc>

মূলত 'সন্নিবেশ' মোডে প্রবেশ করে, একটি লাইন ব্রেক সন্নিবেশ করায় এবং স্বাভাবিক মোডে ফিরে যায়।

ভবিষ্যতের ব্যবহারের জন্য এটি আপনার .vimrc ফাইলে রাখুন।


5

যদি আপনি সাধারণত একটি লাইনের ব্লকটি তিন লাইনে প্রসারিত করেন তবে প্রতিস্থাপনের চেষ্টা করুন। খোলার ব্র্যাকেটটি বন্ধনী / রিটার্নে এবং ক্লোজিং বন্ধনীটি রিটার্ন / বন্ধনীতে পরিবর্তন করুন।

বন্ধনীর বদলে ব্র্যাকেট / রিটার্ন প্রতিস্থাপনের কমান্ডটি এরকম দেখাচ্ছে:

:s/{/{\r/

যেহেতু আপনি এটি প্রায়শই ব্যবহার করতে চান তাই আপনি অবিকৃত কীস্ট্রোকের মতো সম্পূর্ণ ক্রমটি ম্যাপ করতে পারেন:

:map <F7> :s/{/{\r/ ^M :s/}/\r}/ ^M

আপনি যে অনুক্রমে ^ এম দেখতে পাবেন সেখানে [Ctrl-V] টাইপ করুন , তারপরে এন্টার টিপুন ।

আপনার নমুনা লাইনের যে কোনও জায়গায় এখন আপনার কার্সার দিয়ে, ম্যাপযুক্ত কী টিপুন এবং ক্যারেজের রিটার্ন যুক্ত করা হবে।

:help map-which-keysমানচিত্রে অব্যবহৃত কীস্ট্রোকগুলি বেছে নেওয়ার বিষয়ে পরামর্শের জন্য পরীক্ষা করুন।


বিটিডাব্লু: gম্যাপ করা হয়নি কারণ এটি দুটি কী-স্ট্রোক সমন্বিত অনেকগুলি ভিআইএম ম্যাপিংয়ের জন্য 'নেমস্পেস' কী হিসাবে ব্যবহৃত হয় (দেখুন :h g)। সুতরাং এই ম্যাপিংটি আসলে কোনও যায় না।
হটস্কে

g'নেমস্পেস' কী হিসাবে ইতিমধ্যে ব্যবহৃত রয়েছে এমন প্রতিবেদন রয়েছে এমন কোনও ভাল কমান্ড রয়েছে কি?
slothbear

বিশেষভাবে নয়। আমি যেমন বলেছি :help gডিফল্ট g+ কিছু ম্যাপিংয়ের তালিকা দেখার একটি উপায় । z, [ ]আরও 'নেমস্পেস' কী রয়েছে, উদাহরণস্বরূপ দেখুন :help index। আপনি :verbose map gজি দিয়ে শুরু সমস্ত বর্তমান সংজ্ঞায়িত ম্যাপিংগুলি দেখতে অনুরোধ করতে পারেন। সহায়ক webresources হয় viemu.com/vi-vim-cheat-sheet.gif , vimcasts.org/blog/2014/02/follow-my-leader , vimeo.com/85343734 (স্লাইড: speakerdeck.com/nelstrom/follow-my -লিডার )
হটস্কে

3

ধরে নিই যে আপনি Kঅন্য কোনও কিছুতে ম্যাপিং দিয়ে ঠিক আছেন (আপনার পছন্দসইটির আলাদা কী চয়ন করুন) এবং 'অস্থায়ী চিহ্নিতকারী হিসাবে চিহ্নিতকারী ব্যবহার করা ঠিক আছে কেন এটি করবেন না?

:nmap K m'a<CR><Esc>`'

অক্ষরটির উপর এখন কে কে চাপলে তারপরে আপনি লাইন বিরতি ঘটতে চান তবে লাইনটি বিভক্ত হবে এবং কার্সারটি যেখানে ছিল তা ছেড়ে দেবে।


1

আপনি autoindent(অথবা অন্য কোনও ইনডেন্টেশন সহায়তা) সক্ষম করার সময় দু'একটিতে একটি লাইন ভাঙলে উইম স্বয়ংক্রিয়ভাবে কার্সারের ডানদিকে যে কোনও শ্বেতস্পেসকে মেরে ফেলবে ।

আপনি ঐ সেটিংস ব্যবহারের না চান তাহলে, ব্যবহার sপরিবর্তে iকরার জন্য গুলি শুধু ঢোকাতে চেয়ে ফাঁকা জন্য আপনার নতুন পাঠ্য ubstitute বরং। (যদি একাধিক ফাঁকা থাকে তবে কার্সারটি বাম পাশে রাখুন এবং তার cwপরিবর্তে ব্যবহার করুন))


1

মূলত, আপনি যখন একটি লাইন বিভক্ত করবেন তখন আপনি কেবল একটি গাড়ীর রিটার্ন সন্নিবেশ করতে চান, বা আপনি যে কোনও জায়গাতে রয়েছেন, সেই স্থানটি গাড়ীর ফেরতের সাথে প্রতিস্থাপন করুন। ঠিক আছে, কেন এক বা অন্য জন্য নিষ্পত্তি? কে-এর জন্য আমার ম্যাপিংটি এখানে:

"Have K split lines the way J joins lines
nnoremap <expr>K getline('.')[col('.')-1]==' ' ? "r<CR>" : "i<CR><Esc>"

আমি দুটি মূল ক্রিয়াকে এক কী মানচিত্রে ঘনীভূত করতে টার্নারি অপারেটরটি ব্যবহার করি। এটিকে ভেঙে দেওয়া, এর <expr>অর্থ কী কী মানচিত্রের আউটপুটটি গতিশীল হতে পারে এবং এই ক্ষেত্রে শর্তের getline('.')[col('.')-1]==' 'সাথে জড়িত রয়েছে যা কার্সারের নীচে বর্ণচিহ্নটি কোনও স্থান কিনা তা জিজ্ঞাসা করার জন্য দীর্ঘ বায়ুযুক্ত উপায় im শেষ অবধি, পরিচিত ত্রিনিরি অপারেটর ? :হয় হয় স্থানটি লাইনব্রেক ( r<CR>) এর সাথে প্রতিস্থাপন করে বা একটি নতুন সন্নিবেশ করে ( i<CR><Esc>)

এখন আপনার কাছে Jকমান্ডটির জন্য একটি সুন্দর বোন কী মানচিত্র রয়েছে ।


এটি বেশ চালাক। আমি কখনই ইচ্ছাকৃতভাবে কে ব্যবহার করেছি কিনা তা আমি নিশ্চিত নই, তবে এটি অন্য কোথাও মুক্তি বা রিম্যাপিংয়ের পক্ষে উপযুক্ত।
ড্রাগন 788

0

এই কী ম্যাপিংটি আপনার ভিএমআরসি-তে সেট করুন

:map <C-m> i<CR><Esc>h

তারপরে আপনি যদি এটি নিজের ভিমে ব্যবহার করতে চান তবে Ctrl + m টিপুন।


0

আইএমএইচও, অন্তর্নির্মিত ম্যাপিং gsকোনও দরকারী ম্যাপিং নয় (ঘুমের জন্য ভিম রাখুন), এটি বিভাজনের জন্য কেউ এটি ব্যবহার করতে পারে:

nmap gs i<CR><ESC>

0

ইন Vrapper আপনি gql যা মোড সন্নিবেশ না লিখে একটি লাইন বিভক্ত হবে ব্যবহার করতে পারেন, কিন্তু সবসময় খাঁজ বজায় রাখা নাও করতে পারে।


0

আসলে আপনার নিম্নলিখিত সংযুক্ত ক্রিয়াকলাপগুলি প্রয়োজন:

  1. প্রেস vভিসুয়াল মোডে প্রবেশ করতে
  2. আপনি যে লাইনটি বিভক্ত করতে চান তা নির্বাচন করুন
  3. :কমান্ড মোডে প্রবেশ করতে টিপুন
  4. s/\s/\r/g
  5. সম্পন্ন

0

আপনার যদি ইনপুট থাকে:

aaa bbb ccc ddd

এবং আউটপুট করতে চান

aaa
bbb
ccc
ddd

আপনি কমান্ডটি ব্যবহার করতে পারেন

f r<ENTER>;.;.

0

আমি এটির বিপরীত আচরণটি আশা করব তার সবচেয়ে বিশ্বস্ত বাস্তবায়ন বলে মনে করি J

nnoremap S i<cr><esc>^mwgk:silent! s/\v +$//<cr>:noh<cr>`w

এটি কার্সারে সরল নতুন লাইনটি করে, পূর্ববর্তী লাইনে যে কোনও পেছনের শ্বেতস্পেসের উপস্থিতি উপস্থিত থাকে এবং সেখানে উপস্থিত থাকলে কার্সারটিকে সঠিক অবস্থানে ফিরিয়ে দেয় to

i <cr> <esc> - এটি প্রস্তাবিত সর্বাধিক সাধারণ সমাধানগুলির মধ্যে একটি, এটি আপনার কার্সারের নীচে শ্বেতস্থান অক্ষর মুছবে না তবে এটি আপনাকে পিছনে সাদা স্থান সহ ছেড়ে দেয়

^mw - নতুন লাইনের শুরু এবং এর অধীনে একটি চিহ্ন তৈরি করুন w

gk - এক লাইন উপরে যান

:silent! s/\v +$//<cr> - রেজেক্স রেখার শেষে যে কোনও সাদা স্থানকে প্রতিস্থাপন করুন

:noh<cr> - রেগেক্স চালু হতে পারে এমন হাইলাইট করে এমন কোনও অনুসন্ধান সাফ করুন

`w - চিহ্নটি নীচে ফিরিয়ে দিন w

মূলত সম্মিলন উভয় শ্রেষ্ঠ r<esc><cr>এবংi<cr><esc>

দ্রষ্টব্য: আমার এই সীমাবদ্ধ Sযার সাথে সম্ভাব্যভাবে একটি দরকারী কীটি ওভাররাইট করে তবে এটি একটি প্রতিশব্দ ccএবং আমি যেহেতু আমি বিভাজনগুলি হিসাবে প্রায়শই এটি ব্যবহার করি না তবে আমি এটি ওভাররাইট করে ঠিক করছি।



-1

এই ম্যাপিংটি আপনার যে কোনও এক-লাইনের ফাংশনটি ভেঙে ফেলবে। কেবল আপনার কার্সারটিকে লাইনে রাখুন এবং সাধারণ মোডে 'g' চাপুন:

:map g ^f{malr<CR>`a%hr<CR>`a

এটি ধরে নেওয়া হয় যে খোলার ধনুর্বন্ধনী পরে আপনার একটি স্থান এবং বন্ধনী বন্ধনী আগে একটি স্থান আছে। দেখুন যে এটি আপনার জন্য কাজ করে।

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