มีวิธีการคัดลอกทุกบรรทัดจากไฟล์ที่เปิดไปยังคลิปบอร์ดในเครื่องมือแก้ไข VI หรือไม่ ฉันพยายามyGแต่ไม่ได้ใช้คลิปบอร์ดเพื่อจัดเก็บบรรทัดเหล่านั้น
เป็นไปได้เหรอ?
มีวิธีการคัดลอกทุกบรรทัดจากไฟล์ที่เปิดไปยังคลิปบอร์ดในเครื่องมือแก้ไข VI หรือไม่ ฉันพยายามyGแต่ไม่ได้ใช้คลิปบอร์ดเพื่อจัดเก็บบรรทัดเหล่านั้น
เป็นไปได้เหรอ?
คำตอบ:
คุณควรดึงข้อความไปยัง*
หรือ+
ลงทะเบียน :
gg"*yG
คำอธิบาย:
gg
เพื่อรับเคอร์เซอร์ไปที่อักขระตัวแรกของไฟล์"*y
เพื่อเริ่มต้นคำสั่ง yank เพื่อลงทะเบียน*
จากบรรทัดแรกจนกระทั่ง ...G
เพื่อไปยังจุดสิ้นสุดของไฟล์"
นั้น
:version
เป็นกลุ่มและค้นหาการ+xterm_clipboard
ตั้งค่าสถานะ หากนำหน้าด้วยเครื่องหมายลบคุณจะไม่มีฟังก์ชันนี้ หากเป็นกรณีนี้คุณอาจต้องการรวบรวมเสียงเรียกเข้าด้วยตนเองหรือเรียกใช้ gvim ซึ่งโดยปกติจะเปิดใช้งานคุณลักษณะนี้
ใช้:
:%y+
เพื่อดึงสายทั้งหมด
คำอธิบาย:
%
เพื่ออ้างถึงคำสั่งถัดไปเพื่อทำงานกับทุกบรรทัดy
เพื่อดึงเส้นเหล่านั้น+
เพื่อคัดลอกไปยังคลิปบอร์ดของระบบหมายเหตุ : ใน Windows +
และ*
เทียบเท่าดูคำตอบนี้
:help
เพื่อให้แน่ใจว่าคุณใช้งานจริง
set clipboard=unnamed
แต่แล้วก็ใช้งานได้ดี!
E850: Invalid register name
:(
บน Mac
คัดลอกส่วนที่เลือก: เลือกข้อความ (ประเภทv
หรือV
ในโหมดปกติ) และประเภท:w !pbcopy
คัดลอกไฟล์ทั้งหมด :%w !pbcopy
ผ่านมาจากคลิปบอร์ด :r !pbpaste
pbcopy
เป็นโปรแกรมอรรถประโยชน์สำหรับ Mac บน Linux xsel
อาจใช้งานได้แทนหรือclip
บน Windows
:%w !pbcopy
ยังคงทำงานหากไฟล์นั้นมีความยาวมากกว่าความสูงของเทอร์มินัล
+คลิปบอร์ดเป็นบัฟเฟอร์ ในการคัดลอกไปยังคลิปบอร์ดทำ"+yและ [เคลื่อนไหว]
ดังนั้นgg"+yGจะคัดลอกไฟล์ทั้งหมด
ในทำนองเดียวกันเมื่อต้องการวางจากคลิปบอร์ด "+p
อีกวิธีที่ง่ายในการคัดลอกไฟล์ทั้งหมดหากคุณประสบปัญหาในการใช้ VI เพียงแค่พิมพ์ "cat filename" มันจะสะท้อนไฟล์ไปยังหน้าจอและจากนั้นคุณสามารถเลื่อนขึ้นและลงและคัดลอก / วาง
:!cat %
. และเพื่อคัดลอกเนื้อหาของไฟล์โดยทางโปรแกรมไปยังคลิปบอร์ดบน Mac OS::!cat % | pbcopy
นี่คือสิ่งที่ฉันทำเพื่อดึงไฟล์ทั้งหมด:
ggVGy
clipboard
ชุดเพื่อคัดลอกข้อความ yanked ลง+
แม้ว่า
คุณสามารถใช้คำสั่ง "cat" เพื่อเปิดไฟล์และใช้เมาส์เพื่อคัดลอก
reset
เทอร์มินัลล่วงหน้าจากนั้นเลือกทั้งหมดและคัดลอก งานนี้ผ่านssh
ช่วง
(ตอบกลับไปที่ @rshdev และเพื่อหลีกเลี่ยงการคอมไพล์เป็นกลุ่มด้วย + xterm_clipboard ต่อ @nelstrom ในความคิดเห็นที่ OP)
มีโปรแกรมชื่อ xclip ที่ทำงานเหมือน putclip บน Ubuntu 11:
:%!xclip -sel clip
u
มันไม่ได้ติดตั้งโดยค่าเริ่มต้น เพื่อติดตั้งใช้:
sudo apt-get install xclip
บน Ubuntu 12
คุณอาจลองติดตั้งvim-gnome
แพ็คเกจ:
sudo apt-get install vim-gnome
ฉันพยายามเพราะvim --version
บอกฉันว่าจะปิดการใช้งานธงxterm_clipboard (ระบุโดย- ) ซึ่งจำเป็นสำหรับการใช้ฟังก์ชั่นคลิปบอร์ด
-> การติดตั้งแพคเกจvim-gnomeบน Ubuntu 12 ยังติดตั้ง vim เวอร์ชันคอนโซลซึ่งเปิดใช้งานตัวเลือกนี้ (ระบุด้วย+ก่อนเครื่องหมาย xterm_clipboard)
บน Arch Linux
คุณอาจติดตั้งvim-clipboard
ด้วยเหตุผลเดียวกัน
หากคุณเรียกใช้ neovim คุณควรติดตั้งxclip
(ดังอธิบายโดยhelp clipboard-tool
)
หากคุณใช้ Vim ในโหมดแสดงภาพปุ่มตัดและวางแบบมาตรฐานจะมีผลกับ Windows เป็นอย่างน้อย
อย่างน้อยใน Ubuntu เทอร์มินัล (Gnome) การคัดลอกมาตรฐานก็ใช้งานได้ ( CTRLSHIFTCแม้ว่าจะไม่มีทางลัดแป้นพิมพ์มาตรฐานสำหรับselect all
(นอกเหนือALTEจากตามด้วยA)
คุณสามารถกด gg เพื่อค้นหาเคอร์เซอร์ของคุณไปที่จุดเริ่มต้นของไฟล์จากนั้นกด yG เพื่อคัดลอกเนื้อหาทั้งหมดตั้งแต่ต้นจนจบ (ตำแหน่งที่อยู่ G) เพื่อบัฟเฟอร์โชคดี!
ฉันลองคำสั่งบางอย่างที่ผู้คนพูดถึงข้างต้น ไม่มีใครทำงาน จากนั้นฉันได้รับสิ่งที่ง่ายที่สุดของพวกเขาทั้งหมด
ขั้นตอนที่ 1: vi <filename>
ขั้นตอนที่ 2: คลิกขวาที่แถบชื่อเรื่องของหน้าต่าง Putty
ขั้นตอนที่ 3: เลือก "Clear scrollback" (เพื่อหลีกเลี่ยงการคัดลอกส่วนที่เหลือของเซสชัน SSH ของคุณ)
ขั้นตอนที่ 4: คลิกขวาอีกครั้งและเลือก
Window > Settings > lines of scrollback
40000 (ใช้ได้โดยการคลิกขวาที่แถบชื่อเรื่อง) นอกจากนี้ยังช่วยในการใช้cat
แทน vi เนื่องจากเลื่อนผ่านข้อความทั้งหมด
:%y a
ส่งเนื้อหาทั้งหมดไปยังบัฟเฟอร์ของกลุ่มการกดp
ในโหมดคำสั่งจะวางเนื้อหาที่ดึงออกหลังจากบรรทัดที่เคอร์เซอร์ของคุณยืนอยู่
:set go=a
ggVG
ดู:help go-a
:
'a' Autoselect: If present, then whenever VISUAL mode is started,
or the Visual area extended, Vim tries to become the owner of
the windowing system's global selection. This means that the
Visually highlighted text is available for pasting into other
applications as well as into Vim itself. When the Visual mode
ends, possibly due to an operation on the text, or when an
application wants to paste the selection, the highlighted text
is automatically yanked into the "* selection register.
Thus the selection is still available for pasting into other
applications after the VISUAL mode has ended.
If not present, then Vim won't become the owner of the
windowing system's global selection unless explicitly told to
by a yank or delete operation for the "* register.
The same applies to the modeless selection.
ทีนี้วิธีการทั้งหมดนี้น่าสนใจ แต่ในฐานะโปรแกรมเมอร์ผู้ขี้เกียจฉันใช้งัดทุกบรรทัดโดยใช้การรวมกันของตัวเลข + y
ตัวอย่างเช่นคุณมีไฟล์ซอร์สโค้ดที่มีทั้งหมด 78 บรรทัดคุณสามารถทำได้ดังนี้:
gg
เพื่อรับเคอร์เซอร์ที่บรรทัดแรก y
-> มัน yanks 78 บรรทัดด้านล่างเคอร์เซอร์และบรรทัดปัจจุบันของคุณ ไม่มีแนวคิดของ "คลิปบอร์ด" ใน vi ของ Bill Joy ดังนั้นฉันไม่คิดว่าจะมีวิธีการในตัว
คุณลักษณะคัดลอกสิ่งที่ไฮไลต์สู่คลิปบอร์ดอัตโนมัติของ gVim นั้นง่ายที่สุดหรือใช้โปรแกรมภายนอกผ่าน:!
สำหรับเสียงเรียกเข้าของ Cygwin ฉันใช้
:%!putclip
u
บางที Ubuntu มีแอป CLI เช่น putclip
ถ้ามือของคุณเริ่มต้นไปแล้วลองแมปจากCTRL-A CTRL-C
$VIMRUNTIME/mswin.vim
" CTRL-C and CTRL-Insert are Copy
vnoremap <C-C> "+y
" CTRL-A is Select all
noremap <C-A> gggH<C-O>G
inoremap <C-A> <C-O>gg<C-O>gH<C-O>G
cnoremap <C-A> <C-C>gggH<C-O>G
onoremap <C-A> <C-C>gggH<C-O>G
snoremap <C-A> <C-C>gggH<C-O>G
xnoremap <C-A> <C-C>ggVG
ฉันมีพวกเขาแมปไปและ<Leader><C-a>
<Leader><C-c>
ทำการคัดลอกไฟล์ทั้งหมดภายใน vim หรือ tabs
y G
จากนั้นย้ายไปที่แท็บแล้ววางตาม
p
และตัดการใช้ไฟล์ทั้งหมด
d G
ฉันได้เพิ่มบรรทัดต่อไปนี้ใน. vimrc ของฉัน
nnoremap <F5> :%y+<CR>
สิ่งนี้ทำให้ฉันสามารถคัดลอกข้อความทั้งหมดใน Vim ไปยังคลิปบอร์ดโดยการกดF5
(ในโหมดคำสั่ง)
นี่คือคำสั่งแผนที่เพื่อเลือกทั้งหมดไปยังคลิปบอร์ดโดยใช้CTRL+ a:
"
" select all with control-a
"
nnoremap <C-a> ggmqvG"+y'q
เพิ่มลงใน. vimrcของคุณและคุณทำได้ดี ...
ฉันรู้ว่าสิบปีต่อไปนี้ควรจะถูกตัดสิน แต่คำตอบสองข้อแรกไม่ได้ผลสำหรับฉันดังนั้นฉันจึงขุดต่อไป บน Redhat (เซิร์ฟเวอร์ระยะไกล) - Windows 10 (เครื่องท้องถิ่น) หากคุณไม่สามารถเลือกสิ่งทั้งหมดด้วยเมาส์คุณจะติดอยู่เพราะสำเนาปกติไม่ทำงานระหว่างรีโมทและคลิปบอร์ดเครื่องท้องถิ่น
ดังนั้นเพื่อคัดลอกบน Linux ระยะไกลและวางบน Windows ท้องถิ่นระบุบัฟเฟอร์หลักด้วย*และทำดีงัด
gg" * yyใช้
~/.vimrc
ผมได้สร้างฟังก์ชั่นการดำเนินการนี้วางไว้บนของคุณ
fun! CopyBufferToClipboard()
%y+
endfun
nnoremap <Leader>y :call CopyBufferToClipboard()<CR>
command! -nargs=0 CopyFile :call CopyBufferToClipboard()
OBS: ถ้าคุณใช้ neovim คุณต้องมีผู้จัดการคลิปบอร์ดเช่น xclip ด้วย สำหรับประเภทข้อมูลเพิ่มเติมใน neovim:h checkhealth
นอกจากนี้ยังเป็นสิ่งสำคัญที่จะพูดถึงว่าไม่เคยง่ายy
จะคัดลอกไปยังคลิปบอร์ดเพื่อที่จะทำให้ทุกฟีดสำเนา+
ชคือ "คลิปบอร์ดสมัคร" :set clipboard=unnamed,unnamedplus
พยายามที่จะตั้ง: สำหรับข้อมูลหมอดู: :h unnamed
.
นี่คือข้อมูลเพิ่มเติมเกี่ยวกับ vim wikia
คุณสามารถใช้ shortcur ได้เช่นนี้
noremap <F6> :%y+<CR>
หมายความว่าเมื่อคุณกด F6 ในโหมด normald มันจะคัดลอกไฟล์ทั้งหมดและเพิ่มลงในคลิปบอร์ด หรือคุณก็สามารถพิมพ์ในโหมดปกติแล้วการผลักดัน:%y+
Enter
คลิกปุ่มซ้ายของเมาส์ลากส่วนที่คุณต้องการคัดลอกและปล่อย รหัสจะถูกคัดลอกไปยังคลิปบอร์ดโดยอัตโนมัติ
vi
เลย
ฉันไม่สามารถคัดลอกไฟล์โดยใช้คำตอบข้างต้น แต่ฉันมีสีโป๊วและฉันพบวิธีแก้ปัญหาใน Quora
หมายเหตุ: คัดลอกอักขระที่พิมพ์ทั้งหมดของเซสชันนั้นไปยังล็อกไฟล์ดังนั้นจึงจะมีขนาดใหญ่ในที่สุด ในกรณีดังกล่าวให้ลบไฟล์บันทึกและกำหนดไฟล์เป้าหมายเพื่อให้คุณได้รับเนื้อหาของไฟล์นั้น ๆ ที่คัดลอกไว้ในเครื่องของคุณ