কার্সরের উপরে / নীচের লাইনটি কীভাবে মুছবেন, তবে বর্তমান লাইনটি নয়?


11

বর্তমানের উপরে লাইন (বা এন লাইন) মুছে ফেলার জন্য কোন আদেশ আছে? উপরে = বর্তমান অন্তর্ভুক্ত নেই।

অর্থাৎ, এমন কোনও বিকল্প আছে dkযা বর্তমান লাইনটি মুছে না? কীভাবে o/ Oএবং p/ Pকাজের মতো, তবে মুছে ফেলার সাথে।

বর্তমানে, আমি করছি kdd, যা কার্সারকে এক লাইন উপরে নিয়ে যায় এবং এটি মুছে দেয়। আমি করতে পারি nnoremap <Leader>d kddএবং nnoremap <Leader>D jdd-, তবে কার্সারটি সরানো না এমন বিকল্প থাকা আরও ভাল বিকল্প বলে মনে হয়। এমন কি আছে?


যদি আপনার সমস্যাটি হয় যে আপনার ম্যাপিংগুলি কার্সারটি সরিয়ে দেয় আপনি কেন করেন না nnoremap <Leader>d kddjএবং কেন nnoremap <Leader>D jddk?
স্ট্যাটক্স

হয় kddjবা ব্যবহার করে jddkকলাম অবস্থান সংরক্ষণ করা হয় না। আমি বলছি না এটি একটি বড় সমস্যা, তবে এটি বিরক্তিকর। রেকর্ডের জন্য, kddjকার্সারটি মূল অবস্থানের নীচে 1 লাইন সরায়। এবং এর jdd-চেয়ে ভাল বিকল্প বলে মনে হচ্ছে jddkকারণ কমপক্ষে আমি প্রথম অ-সাদা স্থানের অক্ষরে ফিরে আসছি। আমি মুছে ফেলতে চাইছি তার নীচের লাইনটি যদি খালি হয় তবে লাইনের শুরুতে আমি বাকি আছি।
মার্টিন óথ 4'15

আপনার মানচিত্রের জন্য ম্যাকড্ডিয়াকে কীভাবে ব্যবহার করবেন? একটি চিহ্ন সেট করে এবং তারপরে এটির দিকে ফিরে আসে ... আপনি এটিকে যদিও কম ব্যবহৃত চরিত্রে পরিবর্তন করতে চান।
ফিলিপফ্র্যাঙ্ক

@ ফিলিপফ্র্যাঙ্ক বা আমি curs use ব্যবহার করে কার্সারটি ফিরে পেতে এবং কোনও রেজিস্টার দখল করতে পারি না (এমন নয় যে আমি কোনও ব্যবহার করি না :))।
মার্টিন

না এটি কাজ করে না, কে কোনও লাফ নয়, সুতরাং আপনি `using ব্যবহার করে ফিরে যেতে পারবেন না`
ফিলিপফ্র্যাঙ্ক

উত্তর:


30
:-d

বর্তমান লাইনের উপরে লাইনটি কেটে দেয়।


:-5d

বর্তমান লাইনের উপরে 5 তম লাইনটি কেটে দেয় (তবে কার্সারটি সরানো হয়)।


:-5,-d

বর্তমান লাইনের উপরে 5 টি লাইন কেটে দেয়।


:+,+5d

বর্তমান লাইনের নীচে 5 লাইনগুলি কেটে দেয়।


2
এটি এখনও কার্সারটিকে সরিয়ে দেয়, যদিও।
ফিলিপফ্র্যাঙ্ক

1
আপনি কার্সারটি সরানো এড়াতে পারবেন না। আপনি যেটা করতে পারেন তা হ'ল কার্সারটি সরানো এবং এটিকে আবার সরিয়ে নেওয়া
রোম্যানেল

ধন্যবাদ! এই জাতীয় "ভিম ওয়ে" আমি যা খুঁজছিলাম। আমি কার্সারটি যেখানে ছিল সেখানে ফিরে পেতে এটি `with এর সাথে একত্রে ব্যবহার করতে যাচ্ছি।
মার্টিন

6

যদি আমরা ছোট মুছুন নিবন্ধক ব্যবহার করি "-, আমরা উপরের এন লাইনগুলি মোছার পরে কার্সার অবস্থানটি পুনরুদ্ধার করতে পারি।

উদাহরণস্বরূপ, d0dgk"-P1 লাইন উপরে মুছে ফেলে এবং কার্সারটি যেখানে ছিল সেখানে পুনরুদ্ধার করে।

  1. d0কার্সার থেকে রেখার প্রথম অক্ষরে অক্ষর মুছে ফেলা হয়। যেহেতু 0একচেটিয়া গতি, কার্সারের নীচে অক্ষর মুছে ফেলা হয় না। এবং মুছে ফেলা অক্ষরগুলি ছোট মুছে ফেলার নিয়ামক "- এ রেখে দেওয়া হয়।

  2. dgk1 লাইন উপরে মুছে ফেলা। এটি বর্তমান লাইনটি ছেড়ে দেবে, কারণ gkলাইনওয়াইজ এবং একচেটিয়া নয়।

  3. "-P ছোট মুছে ফেলুন নিবন্ধ থেকে পাঠ্য রাখে "-।

এটি হ্যাক এক ধরণের। তবে আপনি যদি প্রাক্তন কমান্ডের সন্ধান করছেন তবে এটি ব্যবহার করার কথা বিবেচনা করুন।


চমৎকার সমাধান! যদিও আমি মনে করি আপনি চান "-Pনা "-p। পরেরটি টেক্সটটি একটু বিড়বিড় করে।
জেমস

@DJMcMayhem আপনি ঠিক বলেছেন আমি উত্তরটি সংশোধন করেছি। এটি নির্দেশ করার জন্য আপনাকে ধন্যবাদ।
এমএস.কিম

5

সম্পাদনা আমি তার উত্তরে @ রোমেনেলের প্রস্তাবিত অন্তর্নির্মিত বৈশিষ্ট্যগুলি জানতাম না: অবশ্যই আপনার পদ্ধতিতে ফাংশন যুক্ত করার চেয়ে উপায় -dএবং +dপদ্ধতিটি পছন্দ করা উচিত.vimrc

হতে পারে আপনার মতো এমন কিছু যুক্ত .vimrcকরা যা আপনি চান তা হতে পারে:

function! DeleteOver()
   let save_cursor = getpos(".")
   normal k
   normal dd
   call setpos(".", save_cursor)
   normal k
endfunction

function! DeleteUnder()
   let save_cursor = getpos(".")
   normal j
   normal dd
   call setpos(".", save_cursor)
endfunction

এই ফাংশনগুলি বর্তমানের উপরের রেখাটি বা লাইনটি মুছে ফেলে এবং মোছার আগে অবস্থানে ফিরে যায়।

ফাংশন জন্য DeleteOver()আমরা এক লাইন আপ যেতে হবে normal kমুছে ফেলার কারণ মুছে ফেলার পরিবর্তন মূল লাইনের সংখ্যা যা দিয়ে হলো নাDeleteUnder()

আপনি এটিতে আপনার যুক্ত করতে পারেন .vimrc

nnoremap <Leader>d :call DeleteOver()<CR>
nnoremap <Leader>D :call DeleteUnder()<CR>

ফাংশনগুলিতে কলিং ম্যাপিং তৈরি করতে।


কার্সার অবস্থান সংরক্ষণ / পুনরুদ্ধারের nostartoflineবিকল্প বিকল্পটি আনসেট / পুনরুদ্ধার করা ।
ধনী

2

... লাফিয়ে যাওয়ার ভয় না থাকলে সম্ভবত আপনি আপনার কর্মপ্রবাহের উন্নতি ঘটাবেন :)

উদাহরণ:

This is where cursor initially is: _.

[Some other stuff you want to keep/skip ...]

I want to delete these lines.
I want to delete these lines.
I want to delete these lines.
I want to delete these lines.
I want to delete these lines.

আপনার ক্রিয়া (সাধারণ মোড, কার্সার চালু _) : /I want Enter 5dd Ctrl-o. এটাই.

অবশ্যই, রোমেনেল উত্তরটি সর্বোত্তম যদি আপনি সমস্ত পুরো লাইনগুলি মুছতে চান এবং আপনি তাদের অফসেট সহজেই গণনা করতে পারেন (উদাহরণস্বরূপ আপেক্ষিক লিনেনবার ব্যবহার করে)। উপরেরটি "অভিনয়" করার আরও সাধারণ উপায়: সেখানে যান, এমন কিছু ব্যবহার করে যা লাফ হিসাবে গণ্য হয়: এর অর্থ আপনি পাঠ্যটি সংশোধন করার পরে আপনি সর্বদা পিছনে যেতে পারেন।

উদাহরণস্বরূপ, যদি আপনি পরম লাইন সংখ্যা ব্যবহার করেন, আপনি প্রতিস্থাপন করতে পারেন /I want Enterভালো কিছু সঙ্গে 78ggবা 78Gযে লাইন নম্বরে সরাসরি ঝাঁপ।


0

এমএস-কিম সলিউশনের ভিত্তিতে আমি কিছুটা ভিন্ন প্রকারের বিকাশ করেছি যা কর্নেল পোস্টেশন সাশ্রয় করে।

function! DeleteLineAbove()
    if line('.') == 1
        echom "You are at the first line!"
        return
    endif
    let l:colsave = col(".")
    exec  "normal! kdd"
    call cursor(line("."), l:colsave)
endfunction
nnoremap <Leader>k :call DeleteLineAbove()<CR>

ওবিএস: আমি এই পোস্টটি রেফারেন্স হিসাবেও ব্যবহার করেছি ।


আপনার কি মানে @ এমএস.কিমের চেয়ে @ স্ট্যাটাক্স?
ধনী

-1

আপনি যদি পুরো ফাইল জুড়ে সদৃশ লাইনগুলি মুছতে চান তবে কেবল নিম্নলিখিতটি করুন:

:g/any part of the string/d

উদাহরণ:

কমান্ড মোডে

:g/I want to delete/d

আপনি যদি প্রাথমিকভাবে স্ট্রিংগুলির একটি তালিকা চান:

:g/I want to delete/p

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