ฉันจะระบุแหล่งที่มาของการเลือก vimscript ได้อย่างไร?


12

หากฉันมี vimscript สองบรรทัดที่ฉันต้องการทดสอบก่อนที่จะใส่ vimrc ของฉันมันเป็นไปได้หรือไม่ที่จะสามารถเลือกภาพได้

ฉันเหนื่อย

  • ทำการเลือกด้วยสายตาvจากนั้นจึงทำการเลือก ฯลฯ
  • :'<,'>so

แต่เป็นกลุ่มให้ข้อผิดพลาด

ไม่อนุญาตให้ใช้ช่วง

ด้วย

:'<,'>w | so

จะช่วยให้

ใช้! เพื่อเขียนบัฟเฟอร์บางส่วน

ฉันจะแหล่ง vimscript ที่เลือกด้วยสายตาได้อย่างไร

คำตอบ:


11

บนบรรทัดคำสั่งกด<C-u>แล้วพิมพ์@*และป้อน

<C-u>จะลบช่วงภาพ'<,'>ที่แทรกโดยอัตโนมัติหากมีการเลือกข้อความบางข้อความ

:@*จะดำเนินการเนื้อหาของการ*ลงทะเบียนซึ่งมีสิ่งที่ถูกเลือกในขณะนี้

แม้ว่าข้อความที่เลือก / ไฮไลต์อยู่ในเว็บเบราว์เซอร์ของคุณ (firefox, chrome, ... ), มันจะทำงาน, การ*ลงทะเบียนจะช่วยให้คุณสามารถเข้าถึงได้โดยตรงในกลุ่ม


ถ้าข้อความของคุณถูกเลือกในบัฟเฟอร์เป็นกลุ่ม, การแก้ปัญหาหนึ่งคือการคัดลอกในการลงทะเบียนชื่อเช่นลงทะเบียนโดยการพิมพ์"ay

จากนั้นบนบรรทัดรับคำสั่งพิมพ์: <C-r>aและป้อน
Ctrl+ rจะให้การเรียงลำดับของการแสดงพร้อมอักขระ"(สำหรับข้อมูลเพิ่มเติมอ่าน:h c_Ctrl-r)
ที่พรอมต์ใหม่นี้หากคุณให้ชื่อของการลงทะเบียนเนื้อหาของมันจะถูกแทรกลงในบรรทัดคำสั่งซึ่งคุณจะสามารถแก้ไขได้ก่อนดำเนินการ


นอกจากนี้ถ้าคุณคัดลอกข้อความบางส่วนโดยไม่ได้ระบุลงทะเบียนก็จะสามารถเข้าถึงได้จากการลงทะเบียนชื่อ"

ดังนั้นสมมติว่าคุณมีบรรทัด vimscript ในไฟล์และต้องการที่จะแหล่งมันอย่างรวดเร็วคุณสามารถคัดลอกมันYแล้วแหล่งที่มาบนบรรทัดคำสั่งด้วย: :<C-r>"และป้อน

ในที่สุดหากคุณใช้วิธีการแก้ปัญหาล่าสุดนี้มีเพียงปัญหาที่คุณต้องระวัง
หากคุณเห็นตัวละครแปลก ๆ ในบรรทัดคำสั่งเช่นนี้^Mมันเป็นเครื่องหมายรูปหมวกของการรับคืน คุณควรลบมิฉะนั้นคุณอาจได้รับข้อผิดพลาด

โดยสรุปคุณ:

  1. คัดลอกบรรทัด vimscript ของคุณด้วย Y
  2. เปลี่ยนเป็นโหมดคำสั่งด้วย :
  3. กด<C-r>เพื่อเข้าสู่การลงทะเบียนพรอมต์
  4. พิมพ์"เพื่อโทรไปยังการลงทะเบียนที่ไม่มีชื่อ
  5. กด backspace เพื่อลบ^Mอักขระ
  6. และกด Enter

1
หวาน! : D ทำงานได้ดี - ฉันไม่เคยเจอมา@*ก่อนขอบคุณ!
the_velour_fog

ฉันดีใจที่มันช่วยคุณ ฉันได้แก้ไขคำตอบเพื่อเสนอทางออกอื่น
saginaw

1
เป็นคนดีฉันลองใช้ข้อเสนอแนะของคุณเกี่ยวกับการใช้งาน : <C-r>a ได้จริงด้วย :) ฉันเดาว่าอ่านกลุ่ม^Mเป็นผลตอบแทนบรรทัด - และดำเนินการแต่ละคนเป็นบรรทัด / คำสั่งของตัวเอง?
the_velour_fog

นั่นเป็นคำถามที่ดีจริงๆฉันไม่รู้ โดยปกติถ้าฉันไม่ลบตัวละครตัวนี้ฉันก็มีข้อผิดพลาด ฉันดีใจที่มันทำงานให้คุณโดยไม่มีข้อผิดพลาด บางทีใครบางคนที่มีความรู้เพิ่มเติมเกี่ยวกับเรื่องนี้จะอธิบายให้เราฟังว่ากลุ่มปฏิบัติต่อตัวละครพิเศษแบบนั้นอย่างไร
saginaw

2

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

if $MYVIMRC != ''
    autocmd BufWritePost    *vimrc      source $MYVIMRC
endif

2

ตรงกับคำถามมากกว่าคำตอบอื่น ๆ ของฉันคุณสามารถกำหนดการแมปเป็นเช่นนี้ ( nnoremapไม่เลือกเพียงแค่ดำเนินการบรรทัดปัจจุบันvnoremapสำหรับเมื่อโหมดภาพทำงานอยู่):

nnoremap <F2> :execute getline(".")<CR>
vnoremap <F2> :<C-u>for line in getline("'<", "'>") \| execute line \| endfor<CR>

ในทั้งสองกรณี "บรรทัดปัจจุบัน" คือ:executed ดังนั้นในเวอร์ชันภาพคุณต้องใช้:executeหนึ่งบรรทัดหลังจากนั้นผ่านการเลือกภาพ

ดังที่ระบุไว้ในคำตอบอื่นการ<C-u>ลบข้อมูลจำเพาะของช่วงที่ปรากฏขึ้นในบรรทัดคำสั่งเมื่อ:พิมพ์ |ตัวละครจะต้องมีการหลบหนีเพราะมิฉะนั้นพวกเขากำลังตีความว่าเป็นจุดสิ้นสุดของvnoremapคำสั่ง

นี่อาจกลายเป็นฟังก์ชั่นเพื่อกำจัดยิมนาสติกหลบหนีบางส่วน แต่ดูเหมือนว่าฉันจะไม่ชนะมากในเวลานี้ โดยทั่วไปจะเป็น vnoremap ที่ขยายออกเป็นหลายบรรทัดและcalled ด้วยช่วงหรือไม่ขึ้นอยู่กับโหมดการทำแผนที่ [nv]


โอ้การแมปโหมดภาพจะประมวลผลทั้งบรรทัดดังนั้นหากคุณบล็อกหรือใช้ตัวละครมันจะไม่สนใจจุดเริ่มต้นและจุดสิ้นสุดภายในเส้น
dash-tom-bang
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.