2012-02-06 65 views
52

Cách sao chép các dòng đã chọn vào khay nhớ tạm trong vim. Tôi biết làm thế nào để làm điều đó cho all text files, nhưng tôi muốn làm trong cho các dòng được chọn. Cảm ơn!Cách sao chép các dòng đã chọn vào clipboard trong vim

+0

liên quan: http://stackoverflow.com/questions/7694633/copy-lines-using-visual-mode-in-vim, http: // stackoverflow.com/questions/3961859/how-to-copy-to-clipboard-using-vim – eckes

+0

xem http://vim.wikia.com/wiki/Cut/copy_and_paste_using_visual_selection – laike9m

Trả lời

69

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

+0

Trong Linux, + là clipboard toàn cục, * là lựa chọn clipboard, trong khi trong Windows cả bản đồ vào clipboard toàn cục. – Mohnish

+1

Bất kỳ cách nào để thực hiện việc này trong Mac Terminal? Điều đó không yêu cầu cài đặt công cụ ... –

10
set guioptions+=a 

sẽ, ... uhmm, trong ngắn hạn, bất cứ khi nào bạn chọn/yank một cái gì đó đặt nó trong clipboard cũng như (không Vim, nhưng bàn phím toàn cầu của hệ thống cửa sổ). Bằng cách đó bạn không cần phải suy nghĩ về việc đưa mọi thứ vào một speci al đăng ký.

+1

//, Hệ điều hành và/hoặc phiên bản nào của Vim thực hiện lời khuyên này? –

56

Nếu bạn đang ở trên Linux và đang sử dụng một phiên bản Vim 7.3.74 hoặc cao hơn (phiên bản đó được cài đặt trong Ubuntu 11.10 trở đi thỏa mãn này), bạn có thể làm

set clipboard=unnamedplus

mà sẽ đặt yanked văn bản vào clipboard toàn cầu, và cho phép bạn dán từ clipboard toàn cục, mà không cần phải sử dụng bất kỳ thanh ghi đặc biệt nào. Không giống như giải pháp của ldigas, điều này cũng sẽ làm việc trên các phiên bản không phải gui của VIm.

+5

Điều này chỉ hoạt động nếu tôi cài đặt gói 'vim-gnome' thay vì' vim'. –

+4

@ dan-klasson: tùy chọn này yêu cầu một vim được biên dịch với hỗ trợ clipboard. Bạn có thể kiểm tra xem đây có phải là trường hợp không bằng cách gõ 'vim --version | grep "+ xterm_clipboard" '. – BenC

+0

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

3

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

sudo apt-get install xclip

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

trong thời gian ở vim lệnh sử dụng ví dụ:

7w !xclip 

hoặc

1,7w !xclip 

hoặc

%w !xclip 

Sau đó chỉ cần trung bấm vào để dán vào bất kỳ ứng dụng khác ...

6

Đối GVIM, nhấn v để đi vào 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 trên toàn cầu.

Từ menu bạn có thể thấy rằng các phím tắt là "+y ví dụ: giữ phím Shift, sau đó nhấn ", sau đó + và sau đó phát hành Shift và nhấn y (cồng kềnh so với Shift + Insert).

3

Nếu vim được biên soạn với sự hỗ trợ clipboard, sau đó bạn có thể sử dụng "*y ý nghĩa: yank văn bản đã chọn trực quan vào sổ đăng ký * ('*' là dành cho clipboard)

Nếu không có sự ủng hộ vào clipboard, tôi nghĩ rằng cách duy nhất khác là sử dụng Ctrl+Insert sau khi chọn trực quan văn bản trong vim.

3

Nếu bạn đang sử dụng vim trong MAC OSX, tiếc là nó đi kèm với verion cũ hơn và không tuân thủ các tùy chọn clipboard. 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 của 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.

thêm dòng sau vào ~/vimrc

set clipboard=unnamed

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

+0

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

0

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

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 
Các vấn đề liên quan