Cách sao chép các dòng đã chọn vào khay nhớ tạm trong vim


Câu trả lời:


105

SHIFTVđưa bạn vào chế độ chọn dòng. Sau đó kéo "*ycác dòng hiện được chọn vào thanh *ghi là clipboard. Có khá nhiều thanh ghi khác nhau, cho các mục đích khác nhau. Xem phần trên selection and drop registersđể biết chi tiết về sự khác biệt giữa *+đăng ký trên Windows và Linux.


10
Trong Linux, + là khay nhớ tạm thời chung, * là khay nhớ tạm lựa chọn, trong khi trong Windows cả hai ánh xạ tới khay nhớ tạm thời chung.
Mohnish

74

Nếu bạn đang sử dụng Linux và đang sử dụng phiên bản VIm 7.3.74 trở lên (phiên bản được cài đặt trong Ubuntu 11.10 trở đi đáp ứng điều này), bạn có thể làm

set clipboard=unnamedplus

sẽ đặt văn bản bị kéo vào khay nhớ tạm thời chung và cho phép bạn dán từ khay nhớ tạm thời chung mà không cần phải sử dụng bất kỳ đăng ký đặc biệt nào. Không giống như giải pháp của ldigas, giải pháp này cũng sẽ hoạt động trên các phiên bản VIm không phải gui.


8
Điều này chỉ hoạt động nếu tôi cài đặt vim-gnomegói thay vì vim.
dan-klasson

4
@ dan-klasson: tùy chọn này yêu cầu vim được biên dịch với hỗ trợ khay nhớ tạm. Bạn có thể kiểm tra xem có đúng như vậy không bằng cách gõ vim --version | grep "+xterm_clipboard".
BenC

Điều này dường như hoạt động để sao chép vào các chương trình không phải vim khác, nhưng khi tôi chuyển sang chế độ chèn trong vim và sử dụng "shift + insert" để dán từ khay nhớ tạm, chỉ có hai dòng đầu tiên được dán ... Tôi đã cài đặt vim-gnome ; tôi đang thiếu một cái gì khác?
t2k32316

1
Nếu bạn đang sử dụng macOS, bạn có thể cần phải sử dụng clipboard=unnamedthay thế ( vim.wikia.com/wiki/Accessing_the_system_clipboard )
streof

13
set guioptions+=a

will, ... uhmm, nói tóm lại, bất cứ khi nào bạn chọn / kéo một cái gì đó, hãy đặt nó vào khay nhớ tạm (không phải của Vim, mà là bàn phím chung của hệ thống cửa sổ). Bằng cách đó, bạn không phải nghĩ về việc sắp xếp mọi thứ vào một sổ đăng ký đặc biệt.


2
//, Lời khuyên này áp dụng cho hệ điều hành và / hoặc phiên bản nào của Vim?
Nathan Basanese

10

Đối với GVIM, nhấn vđể chuyển sang chế độ trực quan; chọn văn bản và nhấn Ctrl+Insertđể sao chép lựa chọn vào khay nhớ tạm thời chung.

Từ menu, bạn có thể thấy rằng phím tắt "+ytức là giữ phím Shift, sau đó nhấn ", sau +đó thả Shift và nhấn y(rườm rà so với Shift + Insert).


Tại sao câu trả lời này không phổ biến? :(
Ankit Shubham

6

Nếu bạn đang sử dụng vim trong MAC OSX, rất tiếc là nó đi kèm với xác minh cũ hơn và không tuân thủ các tùy chọn khay nhớ tạm. May mắn thay, homebrew có thể dễ dàng giải quyết vấn đề này.

cài đặt vim:

brew install vim --with-lua --with-override-system-vim

cài đặt gui Verion of vim:

brew install macvim --with-lua --with-override-system-vim

khởi động lại thiết bị đầu cuối để có hiệu lực.

nối dòng sau vào ~ / .vimrc

set clipboard=unnamed

bây giờ bạn có thể sao chép dòng bằng vim yy và dán nó trên toàn hệ thống.


//, Tôi vừa thử nghiệm điều này trên OSX 10.12.3 và nó hoạt động bình thường sau khi tôi cài đặt cả Vim mới nhất và phiên bản GUI latets của Vim, như bạn đã đề xuất ở đây. Cảm ơn, @anonymous.
Nathan Basanese

4

Cài đặt "xclip" nếu bạn chưa ...

sudo apt-get install xclip

Xclip đưa dữ liệu vào khay nhớ tạm "lựa chọn / được đánh dấu" mà bạn nhấp chuột giữa để dán trái ngược với "ctrl + v"

Trong khi ở trong vim, hãy sử dụng các lệnh cũ:

7w !xclip

hoặc là

1,7w !xclip

hoặc là

%w !xclip

Sau đó, chỉ cần nhấp chuột giữa để dán vào bất kỳ ứng dụng nào khác ...


4

Nếu vim được biên dịch với hỗ trợ khay nhớ tạm, thì bạn có thể sử dụng "*ynghĩa: kéo văn bản đã chọn trực quan vào thanh ghi *('*' là dành cho khay nhớ tạm)

Nếu không có hỗ trợ khay nhớ tạm, tôi nghĩ chỉ có cách khác là sử dụng Ctrl+Insertsau khi chọn trực quan văn bản trong vim.


3

Tôi đã thêm dòng sau vào .vimrc

vnoremap <F5> "+y<CR>

Điều này cho phép bạn sao chép văn bản đã chọn vào khay nhớ tạm bằng cách nhấn F5. Bạn phải ở chế độ trực quan để điều này hoạt động.


1
Thêm vào ~/.vimrcCảm ơn bạn, điều này tốt hơn nhiều.
jaggedsoft

2

Thêm mã sau vào của bạn .vimrc:

if has('clipboard')
    if has('unnamedplus')  " When possible use + register for copy-paste
        set clipboard=unnamed,unnamedplus
    else         " On mac and Windows, use * register for copy-paste
        set clipboard=unnamed
    endif
endif
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.