Làm thế nào để sao chép văn bản từ vim sang một chương trình bên ngoài?


84

Tôi đang cố gắng sao chép-dán một số văn bản từ vim. Tôi đang làm v để vào chế độ hình ảnh, sau đó y một lần tôi đã chọn khối của tôi.

Nó xuất hiện để sao chép văn bản vào clipboard của vim, bởi vì p sẽ dán nó. Nhưng trong một chương trình khác (ví dụ Chrome), nhấp chuột phải-> dán không dán đúng văn bản. Làm cách nào để sao chép văn bản vào bảng tạm chính xác?

Câu trả lời:


62

Những điều sau đây sẽ chỉ hoạt động nếu vim --versionchỉ ra rằng bạn có +xterm_clipboardtính năng. Nếu không, bạn sẽ phải cài đặt các gói bổ sung hoặc biên dịch lại vim với tính năng đó được thêm vào.


Thực tế có hai lựa chọn cho việc này:

"+y

sao chép vào bộ đệm clipboard "thông thường" (để bạn có thể dán bằng Ctrl + V, nhấp chuột phải và chọn "Dán", v.v.), trong khi

"*y

sao chép vào lựa chọn X11 - bạn có thể dán từ bộ đệm này bằng cách sử dụng nhấp chuột giữa.

Lưu ý rằng "*"+làm việc cả hai cách. Vì vậy, nếu bạn đã chọn một số văn bản trong một ứng dụng khác, bạn có thể dán nó vào vim bằng cách sử dụng "*pvà nếu bạn đã sao chép một số văn bản (sử dụng, giả sử, Ctrl-C) thì bạn có thể dán nó vào vim bằng cách sử dụng "+p.


@Tshepang nó không hoạt động từ putty. tôi nên làm gì ?
Rahul Patil

@RahulPatil Tôi không biết; có thể hỏi một câu hỏi riêng, có lẽ trên Super User (vì đây là công cụ Windows, nên nó sẽ được chào đón nhiều hơn ở đó).
tshepang

@RahulPatil - nếu bạn đang sử dụng putty thì bạn đang chỉnh sửa tệp trên máy chủ từ xa, không phải trên máy cục bộ của bạn. Nói chung, máy chủ từ xa sẽ không biết về bảng tạm trên máy cục bộ của bạn. Nếu bạn đang sử dụng máy tính để bàn Linux thì bạn có thể ssh với chuyển tiếp X (miễn là bạn đã cài đặt các thư viện X trên máy chủ), nhưng vì putty chạy trên các cửa sổ nên bạn không chạy X nên bạn không thể chuyển tiếp.
Hamish Downer

1
Xin chào mọi người, Làm thế nào để gõ "+ y? Tôi nên gõ nó trong chế độ Trực quan hoặc trong chế độ lệnh? Điều ngớ ngẩn, nhưng tôi không thể tìm ra nó.
Alind Billore

@AlindBillore: Trong chế độ lệnh. Theo nghĩa đen, bấm các phím shift'sau đó shift=sau đó y(không phải tất cả cùng một lúc, một sau khi khác, ngoại trừ sự thay đổi tất nhiên).
Reid

31

Nếu bạn đang sử dụng vim> = 7.3.74, thì bạn thực sự có thể đặt cái này vào vimrc của bạn:

set clipboard=unnamedplus

Mà sẽ tự động sử dụng +bộ đệm (bảng tạm hệ thống) theo mặc định. Sau đó, để yank (sao chép), bạn chỉ cần sử dụng ylệnh thông thường , v.v.

Tuy nhiên, tôi thấy hành vi này khá khó chịu, vì các lệnh như dđưa văn bản mà chúng hoạt động vào bộ đệm mặc định, điều đó có nghĩa là tôi không thể thực hiện nhanh ddvà dán một dòng từ internet chẳng hạn.


2
+ là một trình phục hồi clipboard
Kit Ho

1
Về điểm cuối cùng của bạn, ddcó nghĩa là "cắt một dòng", vì vậy đó sẽ là hành vi dự kiến. Trong trường hợp hiếm hoi khi bạn thực sự muốn xóa một dòng vào quên lãng, "_ddsẽ thực hiện thủ thuật.
dùng7089

cũng như @ HamishDowner lưu ý trong câu trả lời của mình: Phần sau sẽ chỉ hoạt động nếu vim --versionchỉ ra rằng bạn có +xterm_clipboardtính năng. Nếu không, bạn sẽ phải cài đặt các gói bổ sung hoặc biên dịch lại vim với tính năng đó được thêm vào.
rudolph9

24

Giữ phím shift và chọn văn bản bằng con trỏ chuột.
Văn bản sẽ được sao chép vào clipboard.

Điều này cũng hoạt động để dán từ clipboard vào vim.

Để rõ ràng, điều này hoạt động để vimchạy trong một thiết bị đầu cuối như xterm.


Bạn có nghĩa là giữ phím shift khi chọn văn bản? Đó là cách tôi làm với xterm.
nozimica

@nozimica: Vâng.
Vòng lặp không gian

Câu trả lời này cần có nhiều sự
ủng hộ

@LoopSpace cho các lựa chọn đa dòng, điều này cũng sẽ sao chép số dòng khi set nuđược bật. Vì vậy, bạn có thể muốn chuyển đổi số dòng bằng một số phím tắt hoặc chạy :set nonulệnh trước mỗi lựa chọn
Steven Pribilinskiy

Trên MAC, giữ phím tùy chọn và chọn văn bản bằng con trỏ chuột
abreschi

10

Tôi thấy các tiêu chuẩn "+gP"+ycác lệnh rất khó sử dụng. Vì vậy, tôi đã ánh xạ lại Ctrl-Yđể kéo vào bảng tạm và Ctrl-Pdán từ bảng ghi tạm. Thêm cái này vào.vimrc

nnoremap <C-y> "+y
vnoremap <C-y> "+y
nnoremap <C-p> "+gP
vnoremap <C-p> "+gP

5

Đừng bận tâm, tôi đã tìm thấy câu trả lời - nó được viết trên menu của vim.

"+y

Rất trực quan.


Bạn đang sử dụng gvim?
nozimica

@ nozimica- yeah
ripper234

1
Điều đó cũng có sẵn trong vim chạy trong trình giả lập xterm hoặc thiết bị đầu cuối tương tự trong X (nếu vim được biên dịch với +xterm_clipboardtính năng này).
Gilles

3

Chỉ cần thêm một câu trả lời không cụ thể: Bạn có thể sử dụng Ctrl+Shift+Cđể sao chép vào bảng tạm hệ thống trong Ubuntu (nếu chức năng được cung cấp bởi trình giả lập thiết bị đầu cuối của bạn, gnome-terminal cho một người cung cấp nó). Ctrl+Shift+Vdán vào cửa sổ đầu cuối khác, Ctrl+Vdán thường xuyên vào ứng dụng GUI.

Ngoài ra, nếu bạn chọn văn bản trong thiết bị đầu cuối, sau đó bấm vào giữa, nó sẽ được dán từ bảng tạm X11.


Vì một số lý do, nó không hoạt động. Chỉ cần chọn với chế độ trực quan, sao chép bằng ctrl-shift-C, sau đó dán vào ứng dụng khác bằng Ctrl-shift-V? Văn bản không được sao chép cho tôi.
ripper234

2
@ ripper234: điều này không hoạt động nếu bạn đang sử dụng gvim. Như crazy2be đã nói, chức năng này là từ trình giả lập thiết bị đầu cuối của bạn.
Reid

@ ripper234: 1) Đó là chức năng được cung cấp bởi trình giả lập thiết bị đầu cuối của bạn (gnome-terminal cho một người cung cấp nó), 2) Ctrl + Shift + V là để dán vào thiết bị đầu cuối , các ứng dụng GUI vẫn sử dụng Ctrl + V như bình thường. Tôi sẽ chỉnh sửa câu trả lời để làm cho nó rõ ràng hơn.
crazy2be

nếu bạn sử dụng mousedrag điều khiển thay đổi - chọn văn bản, sao chép dán từ một cửa sổ bộ đệm trở nên dễ dàng.
Stephan

2

Theo mặc định, nếu bạn cài đặt phiên bản nhẹ của vim, thì bạn sẽ không có +xterm_clipboardtính năng trên ( vim --version | grep xterm), cần thiết để sử dụng *+đăng ký bên ngoài vim.

Để kích hoạt nó, bạn phải tự biên dịch vim hoặc cài đặt phiên bản vim đi kèm với nó. Tôi đã sử dụng vim-gnome : sudo apt-get install vim-gnome. Nếu bạn thực hiện vim --version | grep xterm, bạn sẽ thấy rằng đó là bây giờ +xterm_clipboard.

Bây giờ, hãy thử sao chép đến +*và nó sẽ làm việc.


2

Khi tôi kiểm tra vim của tôi không hỗ trợ clipboard:

vim --version | grep clip
-clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      -mouseshape      +startuptime     -xterm_clipboard

Tôi đã cài đặt vim-gnome và sau đó kiểm tra lại

vim --version | grep clipboard
+clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      +mouseshape      +startuptime     +xterm_clipboard

Bây giờ tôi có thể sao chép và dán bằng cách sử dụng "+ y và" + p tương ứng.


1

Giữ phím Shift và chuột chọn văn bản để sao chép nó.

Sau đó dán vào chương trình khác với CTRL + v.

Hoạt động trong thiết bị đầu cuối trên Ubuntu 16.04 của tôi. Không chắc chắn về gvimvà các hệ thống khác.

nhập mô tả hình ảnh ở đây


Điều đó không làm việc.
Astrid

câu trả lời sáng tạo
vidur trừngj

0

Chỉ cần thêm, nếu bất cứ điều gì hoạt động hãy cố gắng chuyển thiết bị đầu cuối kết thúc vim (nếu bạn đang sử dụng vim từ thiết bị đầu cuối). Tôi thấy rằng, ví dụ, bảng tạm không thể truy cập được bằng guake trong khi có thể truy cập từ gnome-terminal.

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.