เปิดรายการไฟล์ในไดเรกทอรีที่จะเลือกไฟล์ที่จะแก้ไขในกลุ่ม


0

ในวิดีโอที่ดูว่าฉันทำงานอย่างไรเขาได้รับผลลัพธ์find . -type fและใช้รายการนี้เป็นไฟล์ vim ปกติเพื่อค้นหา คนที่เขาพบไฟล์นี้ในรายการเขาสามารถเปิดในกลุ่ม สิ่งนี้มีประโยชน์จริง ๆ แต่เขาไม่ได้ระบุนามแฝงที่จะทำ มีคนให้นามแฝงแก่ฉันในสิ่งเดียวกันได้ไหม

คำตอบ:


2

สิ่งที่เกิดขึ้นสามารถปะติดปะต่อจากผู้เขียนdotfiles คำเตือน! สิ่งทั้งหมดนั้นค่อนข้างซับซ้อน (และฉลาด)

  1. นี่คือvim-คำสั่ง bash:

    vim-() {
      vim -s <(printf '\eh')
    }
    

    มันเปิดเป็นกลุ่มและจำลองลำดับคีย์, <Esc>h.

  2. <Esc>hถูกแมปในการดำเนินการคำสั่งที่กำหนดเองซึ่งจะเรียกสคริปต์ภายนอก:FPScratchyack_find

    nmap <ESC>h :FPScratchy "ack_find"<CR>
  3. วัตถุประสงค์ของคำสั่งนั้นคือการสร้าง "หน้าต่างเริ่มต้น" ซึ่งมีรายการไฟล์ที่สร้างโดยคำสั่งภายนอกและทำการรีเมคบางอย่างสำหรับการนำทาง: <CR>ในโหมดปกติเพื่อเปิดไฟล์ภายใต้เคอร์เซอร์<CR>ในโหมดภาพเพื่อเพิ่มไฟล์ที่เลือกไปยัง รายการท้องถิ่นและ<Esc><CR>ในโหมดปกติเพื่อเปิดไฟล์ภายใต้เคอร์เซอร์ในหน้าต่างแยก

    function! FPScratchy(...)
      call call(function("Scratchy"), a:000)
      setlocal cursorline
    
      nmap <buffer> <CR> 0gf
      vmap <buffer> <CR> :Lines2arglocal<CR>
      nmap <buffer> <ESC><CR> 0<c-w>f<c-w>w
    endfunction
    command -nargs=* FPScratchy :call FPScratchy(<args>)
    
    function! Lines2arglocal() range
      let lines = map(range(a:firstline, a:lastline), 'getline(v:val)')
    
      execute "arglocal " . join(lines, " ")
    endfunction
    command -range Lines2arglocal <line1>,<line2>:call Lines2arglocal()
    
  4. ผู้เขียนมีการเปลี่ยนแปลงของเขาfindวิธีชั่นไปเล็กน้อยที่เกี่ยวข้องมากขึ้นackชั่นหนึ่งไม่กี่ปีที่ผ่านมา เราไม่มีทางรู้ว่าเขาใช้อะไรทุกวัน แต่เราสามารถสรุปได้ว่ามันง่าย:

    $ find . -type f

2

มีหลายวิธีที่จะทำเช่นนั้น ในการรับเอาต์พุตของคำสั่งนั้นลงในบัฟเฟอร์ Vim ให้เปิด Vim และดำเนินการ

:r!find . type f

อีกวิธีในการทำเช่นนั้น, การใช้ vim ในเทอร์มินัล, คือการดำเนินการต่อไปนี้ที่ shell prompt

$ find . type f | vim -

ฉันมักจะวางเคอร์เซอร์ไว้เหนือชื่อไฟล์และประเภทที่ต้องการ

<C-W>f

โดยที่ <CW> หมายถึง Ctrl-W ที่จะเปิดไฟล์ในหน้าต่างใหม่ซึ่งหลีกเลี่ยงปัญหาในการพยายามเปิดไฟล์ใหม่ในบัฟเฟอร์ที่แก้ไข

วิธีการอื่นจะเป็นการดำเนินการครั้งแรก

:set nomodified

จากนั้นพิมพ์

gf

ที่จะเปิดไฟล์ใหม่ในบัฟเฟอร์ / หน้าต่างที่มีรายการไฟล์

อีกวิธีหนึ่งคือการวางเคอร์เซอร์ไว้เหนือชื่อไฟล์ที่ต้องการและดำเนินการ

:e! <C-R>f<CR>

โดยที่ <CR> หมายถึง Ctrl-R และ <CR> หมายถึงปุ่ม Enter ชุด <CR> f จะขยายเป็นชื่อไฟล์ภายใต้เคอร์เซอร์

ดู

:help :r!
:help CTRL-W_f
:help gf
:help 'modified'
:help c_CTRL-R_f

ก่อนหน้านั้นฉันจะรับรายชื่อไฟล์เป็นกลุ่มได้อย่างไร?
woodstok

:r!find . type fอาจจะมี :help :r!ดู ฉันจะอัปเดตคำตอบ
garyjohn

@MIkhail: ถ้าเขาเริ่มต้นจากบรรทัดคำสั่งและไม่ได้มาจากภายในกลุ่ม Vim ที่เปิดบางทีเขากำลังทำงานfind . -type f | vim -อยู่ สิ่งนี้จะคว้า STDIN และใส่ลงในบัฟเฟอร์
Daniel Andersson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.