scratch
บางครั้งผมเห็นเปิดหน้าต่างที่มีชื่อ
ฉันรู้ว่ามันเป็นบัฟเฟอร์ / หน้าต่างชั่วคราว
ฉันจะสร้างลังได้อย่างไร
:h scratch
ไม่มีอะไรคืน
scratch
บางครั้งผมเห็นเปิดหน้าต่างที่มีชื่อ
ฉันรู้ว่ามันเป็นบัฟเฟอร์ / หน้าต่างชั่วคราว
ฉันจะสร้างลังได้อย่างไร
:h scratch
ไม่มีอะไรคืน
คำตอบ:
อาจเป็นบัฟเฟอร์รอยขีดข่วนซึ่งสามารถตั้งชื่อได้ จากความช่วยเหลือ:
เกา
มีข้อความที่สามารถละทิ้งได้ตลอดเวลา มันจะถูกเก็บไว้เมื่อปิดหน้าต่างจะต้องถูกลบอย่างชัดเจน การตั้งค่า:>
:setlocal buftype=nofile :setlocal bufhidden=hide :setlocal noswapfile The buffer name can be used to identify the buffer, if you give it a meaningful name.
:help special-buffers
นี้สามารถพบได้ใน
:edit
ไฟล์เพื่อแก้ไขไฟล์บัฟเฟอร์ใหม่จะถูกสร้างขึ้นโดยอัตโนมัติ บัฟเฟอร์ที่ว่างเปล่าที่สามารถสร้างขึ้นโดยการป้อน:enew
หรือหรือ:new
:vnew
จาก Vim buffer คำถามที่พบบ่อย: vim.fandom.com/wiki/Vim_buffer_FAQ
:helpgrep scratch
เปิดใช้งานเป็นผลลัพธ์หนึ่งใน 10 (ในการติดตั้งของฉัน)
ฉันจำเคล็ดลับที่เป็นกลุ่ม (ซึ่งถูกย้ายไปยัง vim.wikia) ในหัวเรื่อง
ฟังก์ชั่นเวอร์ชั่นล่าสุดที่ฉันใช้เพื่อสร้างบัฟเฟอร์รอยขีดข่วนได้ตั้งค่า:
'buflisted'
เป็นเท็จ'readonly'
(จากปลั๊กอินไลบรารี VimL ของฉัน: lh-vim-lib)
function! lh#buffer#scratch(bname, where) abort
try
set modifiable
" The next function takes care of working around this damn E36
call lh#window#create_window_with(a:where.' sp '.escape(substitute(a:bname, '\*', '...', 'g'), '#%'))
catch /.*/
throw "Can't open a buffer named '".a:bname."'!"
endtry
setlocal bt=nofile bh=wipe nobl noswf ro
return bufnr('%')
endfunction
บัฟเฟอร์ 'เริ่มต้น' เป็นเพียงคำที่ไม่เป็นทางการสำหรับสถานที่ที่จะพิมพ์เนื้อหาชั่วคราวโดยพลการ
การปฏิบัติตามคำตอบที่ยอมรับและคำถามอื่นฉันสร้างฟังก์ชันต่อไปนี้ใน vimrc ของฉัน
ฟังก์ชั่นสร้างบัฟเฟอร์เปล่าในหน้าต่างปัจจุบันและตั้งชื่อว่า 'รอยขีดข่วน' บัฟเฟอร์รอยขีดข่วนไม่ได้รับการป้องกันหากคุณพยายามที่จะออก มันจะถูกทิ้งโดยไม่แจ้งให้ทราบแม้ว่าจะมีการเปลี่ยนแปลงที่ไม่ได้บันทึกหากคุณออกจาก Vim หรือเช็ด ( :bw
)
ใส่ฟังก์ชั่นนี้ใน vimrc ของคุณ :call Scratch()
เพื่อสร้างการใช้บัฟเฟอร์รอยขีดข่วน
function! Scratch()
split
noswapfile hide enew
setlocal buftype=nofile
setlocal bufhidden=hide
"setlocal nobuflisted
"lcd ~
file scratch
endfunction
:@"
คุณสามารถทดสอบนี้ได้อย่างรวดเร็วโดยการลากสายแล้ว :call Scratch()
จากนั้นคุณสามารถลอง
มีการใช้การแบ่งดังนั้นบัฟเฟอร์ปัจจุบันของคุณจะไม่ได้รับผลกระทบเมื่อคุณสร้างบัฟเฟอร์การลบ
(หากคุณต้องการละเว้นsplit
จากฟังก์ชันดังนั้นบัฟเฟอร์ปัจจุบันของคุณจะเป็น "ซ่อนอยู่" (ไม่อยู่ในหน้าต่างอีกต่อไป) เมื่อคุณสร้างบัฟเฟอร์เริ่มต้น Vim จะยังคงหยุดและแจ้งให้คุณถ้าคุณพยายามที่จะเลิกกับการเปลี่ยนแปลงที่ไม่ได้บันทึกไว้ กันชน).
โดยปกติแล้วบัฟเฟอร์รอยขีดข่วนจะมีไดเรกทอรีการทำงานเดียวกันของบัฟเฟอร์ที่คุณอยู่เมื่อคุณเรียกใช้ฟังก์ชัน Scratch ฉันได้รวมบรรทัดออกความคิดเห็นเพื่อเปลี่ยนไดเรกทอรีทำงานบัฟเฟอร์รอยขีดข่วนเป็นบ้าน นี่คือสำหรับผู้ที่มีบรรทัดสถานะตลกที่อาจแสดงเส้นทางของไดเรกทอรีปัจจุบันเป็นเส้นทางบัฟเฟอร์ หรือเพียงแค่สำหรับผู้ที่ชอบมัน
คุณสามารถตั้งค่าบัฟเฟอร์รอยขีดข่วนเป็น "แสดงรายการ" หรือ "ไม่แสดงรายการ" (แสดงรายการตามค่าเริ่มต้น) ถ้าคุณทำมันไม่แสดงคุณจะไม่เห็นมันในของคุณ:buffers
รายการ :buffers!
แต่มันจะอยู่ใน ยกเลิกการใส่เครื่องหมายข้อคิดเห็นnobuflisted
บรรทัดหากคุณต้องการให้ไม่อยู่ในรายการ จดทะเบียนหรือไม่อยู่ในรายการคุณสามารถเปลี่ยนเป็นบัฟเฟอร์รอยขีดข่วน:b scratch
ได้ตลอดเวลา การทำให้บัฟเฟอร์ในรายการปรากฏทำให้เข้าถึงได้ง่ายขึ้นเล็กน้อย ตัวอย่างเช่น:sball
จะรวมไว้ในการแยก
หากคุณใช้:bw
(การลบบัฟเฟอร์) บนบัฟเฟอร์เริ่มต้น Vim จะลบเนื้อหาและลบบัฟเฟอร์โดยไม่มีการเตือน หากคุณใช้:bd
(ลบบัฟเฟอร์) บนบัฟเฟอร์เริ่มต้น Vim จะลบเนื้อหาโดยไม่มีการเตือนและทำให้บัฟเฟอร์ไม่อยู่ในรายการ
คุณสามารถสร้างบัฟเฟอร์รอยขีดข่วนได้หลายอัน Vim เริ่มบ่น แต่คุณยังคงมีคนเพิ่มเติม
buftype=hide
ก่อนที่จะตั้งชื่อการเปลี่ยนไดเรกทอรีนั้นไม่จำเป็นเพราะชื่อบัฟเฟอร์จะไม่ถูก "จัดการเหมือนชื่อไฟล์" นอกจากนี้อาจจะมีมูลค่าการกล่าวขวัญซึ่งจะช่วยป้องกันบัฟเฟอร์แสดงในการส่งออกของ'nobuflisted'
:ls
คุณเป็นคนพาดพิงถึงมัน แต่ไม่ได้พูดถึงมันอย่างชัดเจน
buftype=hide
เป็นเรื่องไร้สาระแน่นอนและใช่ฉันกำลังพูดถึงจริงbuftype=nofile
:) แต่ฉันไม่สามารถทำซ้ำพฤติกรรมที่คุณอธิบายและยังเชื่อว่าคำสั่งVim buffer names are always filenames
นั้นไม่ถูกต้อง ถ้าฉันลบcd
บรรทัดออกจากฟังก์ชั่นของคุณแล้วเรียกใช้มันจะไม่มีเส้นทางในสเตทไลน์ของฉันหรือในเอ้าท์พุทของecho bufname('%')
ฉันสงสัยว่านี่อาจเป็นปัญหากับสเตทไลน์ของคุณมากกว่าชื่อบัฟเฟอร์ 'statusline'
ตัวเลือกของคุณตั้งไว้เป็นอะไร?
statusline
เป็นสิ่งที่ชอบexpand(&buftype == 'nofile' ? '%' : '%:p:~:h')
แต่ฉันคิดว่าตอนนี้เราเข้าสู่อาณาจักรแห่งความชอบส่วนตัวแล้ว หากคุณตัดสินใจที่จะยึดติดกับโซลูชันไดเรคทอรีการเปลี่ยนแปลงคุณควรใช้:lcd
การ จำกัด การเปลี่ยนแปลงของหน้าต่างที่มีปัญหา แต่ควรเป็นวิธีที่ดีสำหรับคุณ อย่างไรก็ตามฉันคิดว่านี่เป็นคำตอบที่ดี +1!
:h
คำสั่งใดที่ใช้ในการเข้าถึงความช่วยเหลือนี้