การ จำกัด การทำงานให้กับส่วนของรหัส


10

มีหลายครั้งในชีวิตการทำงานในแต่ละวันของฉันที่ฉันจำเป็นต้องใช้ในฟังก์ชั่นเฉพาะสิ่งต่าง ๆ เช่นการเน้นหรือค้นหาตัวแปร แต่ฉันไม่เคยจัดการเพื่อ จำกัด ขอบเขตของการแก้ไข / การค้นหา

มีวิธีในการพูดเลือกคัดสรรค้นหาการอ้างอิงทั้งหมด$colorภายในชุดของวงเล็บปีกกาหรือพับนี้ ฯลฯ หากเป็นไปได้มันจะเหมาะอย่างยิ่งที่นี่เป็นเรื่องธรรมดาที่ค่อนข้างเพื่อที่จะสามารถนำไปใช้กับการแก้ไข / เปลี่ยนข้อความ

ตัวอย่างเช่น:

$color = "#fff";
function PickColor () {
  $color = "#bbb";
  $newColors = ["#000", "#fbf", $color];
  foreach ($newColors as $c) {
    if ($c == "#fff") {
       break;
    }
  }
}
$differentColor = $color;

รหัสนี้เป็นตัวอย่างที่ค่อนข้างแย่อย่างไรก็ตามถ้าฉันต้องการแทนที่อินสแตนซ์ทั้งหมดของ $ color เราจะทำสิ่งนี้ในบริบทของฟังก์ชัน PickColor ได้อย่างไร เป็นอีกตัวอย่างหนึ่งการใช้#และ*คุณสามารถไปที่อินสแตนซ์ถัดไปของวัตถุข้อความได้คุณจะ จำกัด ขอบเขตสำหรับการค้นหาเพียงแค่ฟังก์ชั่นนี้ (โดยทั่วไปคือการตัดคำค้นหา) ตรงข้ามกับไฟล์ทั้งหมดซึ่งอาจครอบคลุมหลายพันบรรทัด สถานที่ของคุณหรือแทนที่สิ่งที่ไม่ถูกต้องในฟังก์ชั่นอื่นที่คุณไม่ควร?

คำตอบ:


15

นี่คือวิธีที่จะทำ

1  | $color = "#fff";
2  | function PickColor () {
3  |     $color = "#bbb";
4  |     $newColors = ["#000", "#fbf", $color];
5  |     foreach ($newColors as $c) {
6  |         if ($c == "#fff") {
7  |             break;
8  |         }
9  |     }
10 | }
11 | $differentColor = $color;

ฉันได้แก้ไขตัวอย่างของคุณเพื่อรวมหมายเลขบรรทัด

ดังนั้นตอนนี้คุณสามารถแทนที่อินสแตนซ์ของ$colorด้วยการพูดด้วย$newColorวิธีต่อไปนี้

ช่วงหมายเลขบรรทัด

:1,11s/\$color/$newColor/g

สิ่งนี้ทำให้การทดแทนทำงานในบรรทัดที่ 1-11

ช่วงสายสัมพัทธ์

วางเคอร์เซอร์ของคุณที่บรรทัด 1 จากนั้น ...

:.,11s/\$color/$newColor/g

นี่บอกว่าช่วงเริ่มต้นด้วยบรรทัดปัจจุบันและสิ้นสุดที่บรรทัด 11

ช่วงการเลือกภาพ

ไปที่บรรทัดที่ 1 และกดแล้วShift+V Gสิ่งนี้จะเลือกบรรทัดที่ 1 จากนั้น ...

:'<,'>:s/\$color/$newColor/g

สิ่งนี้ จำกัด การทดแทนให้อยู่ในช่วงที่ครอบคลุมโดยการเลือกของคุณ Vim จะแทรก'<,'>ช่วงโดยอัตโนมัติเมื่อคุณกด:ด้วยตัวเลือกที่ใช้งานอยู่


ฉันรักที่เป็นกลุ่มที่มีอยู่เสมอบางสิ่งบางอย่างที่จะเรียนรู้และค้นพบที่จะทำให้ชีวิตง่ายขึ้นและในชีวิตประจำวัน :)
ไคล์แม็คกิล

6

หากคุณพอใจกับเส้นทางปลั๊กอินมีNrrwRgnอยู่

คุณเลือกบล็อกที่มองเห็นได้จากนั้นเรียกใช้:NRคำสั่งซึ่งจะเปิดบัฟเฟอร์ใหม่ (แยกเป็นส่วน) ด้วยข้อความที่เลือก คุณสามารถทำการปรับเปลี่ยนบัฟเฟอร์นี้และเมื่อคุณบันทึกไปมันจะได้รับการบันทึกกลับไปยังไฟล์ต้นฉบับเช่นกัน

ในความคิดของฉันปลั๊กอินนี้แก้ปัญหาได้เป็นอย่างดีช่วยให้คุณมุ่งเน้นไปที่การดำเนินการที่คุณต้องการโดยไม่ต้องคิดวิธีนำไปใช้กับช่วงที่กำหนดใหม่


นี่เป็นหนึ่งในปลั๊กอินที่ฉันสาบานด้วย .. มันเหมือนกับมีบัฟเฟอร์รอยขีดข่วนเล็กน้อยที่คุณสามารถคอมมิตกลับไปที่ไฟล์รหัสปกติของคุณ
craigp

3

คุณเลือกบล็อกที่คุณสนใจในโหมดบรรทัดภาพ (shift + v) จากนั้นคุณพิมพ์:และคำสั่งของคุณซึ่งจะนำไปใช้กับบล็อก

ดังนั้นหากคุณต้องการแทนที่ในส่วนที่เลือกคุณสามารถเรียกใช้ :s/string/replacement_string


ขวา; เช่น,VaB:s/\$color/replaced/g
wchargin

เพิ่งเพิ่มที่จุดดี :)
Stefan Dorunga

0

ใช้วัตถุข้อความวงเล็บปีกกา '}' และเลือกภายในวงเล็บปีกกาด้วย 'i}'

บนบรรทัดด้วยวงเล็บปีกกาเปิดของฟังก์ชั่น:

$<C-V>i}:s/\$color/$newColor/g

ก่อนอื่นให้ไปที่จุดสิ้นสุดของบรรทัด (ซึ่งจะอยู่ในหรือภายในวงเล็บปีกกาเปิด) จากนั้นไปที่การเลือกภาพจากนั้นเลือกโดยใช้วัตถุข้อความวงเล็บปีกกา 'i}' อยู่ในวงเล็บปีกกา 'a}' อยู่ในวงเล็บปีกกา

สำหรับภาษาที่ไม่มีเครื่องหมายปีกกาวัตถุข้อความเป็นกลุ่ม: คำแนะนำที่ชัดเจนแนะนำปลั๊กอินบางตัว:

  • สำหรับภาษาเช่น Python และ CoffeeScript, Indent Objectจัดเตรียมวัตถุข้อความตามระดับการเยื้อง: aiรวมถึงระดับการเยื้องปัจจุบันและบรรทัดด้านบน iiรวมถึงระดับการย่อหน้าปัจจุบันยกเว้นบรรทัดด้านบน
  • Ruby Blockเพิ่มการสนับสนุนสำหรับวัตถุข้อความarและirขึ้นอยู่กับการปรากฏตัวของendคำหลัก
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.