ในวิดีโอที่ดูว่าฉันทำงานอย่างไรเขาได้รับผลลัพธ์find . -type f
และใช้รายการนี้เป็นไฟล์ vim ปกติเพื่อค้นหา คนที่เขาพบไฟล์นี้ในรายการเขาสามารถเปิดในกลุ่ม สิ่งนี้มีประโยชน์จริง ๆ แต่เขาไม่ได้ระบุนามแฝงที่จะทำ มีคนให้นามแฝงแก่ฉันในสิ่งเดียวกันได้ไหม
ในวิดีโอที่ดูว่าฉันทำงานอย่างไรเขาได้รับผลลัพธ์find . -type f
และใช้รายการนี้เป็นไฟล์ vim ปกติเพื่อค้นหา คนที่เขาพบไฟล์นี้ในรายการเขาสามารถเปิดในกลุ่ม สิ่งนี้มีประโยชน์จริง ๆ แต่เขาไม่ได้ระบุนามแฝงที่จะทำ มีคนให้นามแฝงแก่ฉันในสิ่งเดียวกันได้ไหม
คำตอบ:
สิ่งที่เกิดขึ้นสามารถปะติดปะต่อจากผู้เขียนdotfiles คำเตือน! สิ่งทั้งหมดนั้นค่อนข้างซับซ้อน (และฉลาด)
นี่คือvim-
คำสั่ง bash:
vim-() {
vim -s <(printf '\eh')
}
มันเปิดเป็นกลุ่มและจำลองลำดับคีย์, <Esc>h
.
<Esc>h
ถูกแมปในการดำเนินการคำสั่งที่กำหนดเองซึ่งจะเรียกสคริปต์ภายนอก:FPScratchy
ack_find
nmap <ESC>h :FPScratchy "ack_find"<CR>
วัตถุประสงค์ของคำสั่งนั้นคือการสร้าง "หน้าต่างเริ่มต้น" ซึ่งมีรายการไฟล์ที่สร้างโดยคำสั่งภายนอกและทำการรีเมคบางอย่างสำหรับการนำทาง: <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()
ผู้เขียนมีการเปลี่ยนแปลงของเขาfind
วิธีชั่นไปเล็กน้อยที่เกี่ยวข้องมากขึ้นack
ชั่นหนึ่งไม่กี่ปีที่ผ่านมา เราไม่มีทางรู้ว่าเขาใช้อะไรทุกวัน แต่เราสามารถสรุปได้ว่ามันง่าย:
$ find . -type f
มีหลายวิธีที่จะทำเช่นนั้น ในการรับเอาต์พุตของคำสั่งนั้นลงในบัฟเฟอร์ 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
:r!find . type f
อาจจะมี :help :r!
ดู ฉันจะอัปเดตคำตอบ
find . -type f | vim -
อยู่ สิ่งนี้จะคว้า STDIN และใส่ลงในบัฟเฟอร์