Có cách nào để sao chép một khối văn bản vào bảng tạm hệ thống, để tôi có thể dán nó vào một chương trình khác không?
cpip
, cpi{
.
Có cách nào để sao chép một khối văn bản vào bảng tạm hệ thống, để tôi có thể dán nó vào một chương trình khác không?
cpip
, cpi{
.
Câu trả lời:
Đối với các hệ thống dựa trên X11 (ví dụ: Linux và hầu hết các hệ thống tương tự UNIX khác ), có hai bảng ghi độc lập với nhau:
^C
và được dán bằng ^V
(Nó giống như MS Windows).Hệ thống OS X và Windows chỉ có một bảng tạm.
Đối với các hệ thống X11, cũng có một số công cụ đồng bộ hóa các bảng ghi này cho bạn; Vì vậy, nếu chúng có vẻ giống nhau, bạn có thể có một trong số chúng đang chạy.
Vim có hai thanh ghi đặc biệt tương ứng với các clipboards này:
*
sử dụng CHÍNH HÃNG; ghi nhớ: S tar là S đắc cử (đối với copy-on- s đắc cử)+
sử dụng CLIPBOARD; ghi nhớ: CTRL PLUS C (đối với tổ hợp phím chung)Trên Windows & OS X, không có sự khác biệt giữa +
và *
, vì các hệ thống này chỉ có một bảng tạm và cả hai thanh ghi đều đề cập đến cùng một thứ (không quan trọng bạn sử dụng cái nào).
Bạn có thể sử dụng các thanh ghi như bất kỳ đăng ký. Ví dụ: sử dụng bảng tạm PRIMARY *
với các lệnh y
và p
:
"*yy
"*p
Bạn có thể sử dụng điều này như các phím bấm tiện lợi hơn:
noremap <Leader>y "*y
noremap <Leader>p "*p
noremap <Leader>Y "+y
noremap <Leader>P "+p
Nếu bạn muốn "tự động" giao diện với bảng tạm của hệ thống thay vì tham khảo thủ công mọi lúc, bạn có thể đặt clipboard
biến:
unnamed
sử dụng *
(CHÍNH, khi chọn)unnamedplus
sử dụng +
(CLIPBOARD, ^C
)Bây giờ, chỉ cần sử dụng yy
sẽ vào bảng tạm của hệ thống, thay vì đăng ký không tên của Vim và p
sẽ dán bảng tạm của hệ thống.
Bạn cũng có thể gán cho các thanh ghi này giống như bất kỳ thanh ghi nào với let
:
:let @+=42
:let @*=42
Các clipboard
thiết lập có một số tùy chọn hơn (chẳng hạn như loại trừ các bộ lọc); nhưng đây là những điều cơ bản Xem :help 'clipboard'
cho toàn bộ câu chuyện ;-)
Nếu bạn sử dụng gVim, bạn có thể có hành vi sao chép khi chọn khi sử dụng
:set guioptions+=a
.
Điều này được bật theo mặc định trên các hệ thống X11 (bản sao thành PRIMARY), nhưng không phải trên MS Windows & OSX (vì chọn bất kỳ văn bản nào sẽ ghi đè lên bảng tạm của bạn).
+clipboard
?Vim yêu cầu +clipboard
cờ tính năng cho bất kỳ thứ nào trong số này hoạt động; bạn có thể kiểm tra xem Vim của bạn có điều này hay không bằng cách sử dụng :echo has('clipboard')
từ bên trong Vim (nếu đầu ra là 0
, nó không có mặt, nếu là 1
nó), hoặc kiểm tra đầu ra của
vim --version
for +clipboard
.
Hầu hết các bản phân phối Linux đều có bản dựng Vim "tối thiểu" theo mặc định, không có +clipboard
, nhưng bạn thường có thể cài đặt nó:
vim-gtk
hoặc vim-gnome
.vim-X11
và chạy vimx
thay vì vim
( thông tin thêm ).gvim
(điều này cũng sẽ cho phép +clipboard
bình thường vim
).Bạn cũng có thể sử dụng xclip
, xcopy
hoặc xsel
để sao chép văn bản vào bảng tạm; xem các câu hỏi sau để có giải pháp:
Bạn cũng có thể sử dụng bảng tạm trên các máy từ xa nếu bạn bật chuyển tiếp X11 qua SSH. Điều này đặc biệt hữu ích với mẹo trên vì bạn có thể sử dụng
xclip
để truy cập vào bảng tạm của máy tính để bàn. Vim trên máy bạn vẫn sẽ cần +clipboard
tính năng này.
Điều này yêu cầu ForwardX11Trusted
cài đặt và chỉ nên được thực hiện với các máy chủ đáng tin cậy , vì điều này mang lại cho máy chủ quyền kiểm soát gần như hoàn toàn đối với phiên X11 của bạn:
$ ssh -XY myhost
Để duy trì các cài đặt này liên tục (vì vậy bạn không cần phải thêm -XY
mỗi lần), bạn có thể làm một cái gì đó như thế này trong ~/.ssh/config
:
# Do **NOT** set this globally; it gives the server complete control over
# your X11 session.
Host myhost
ForwardX11 yes
ForwardX11Trusted yes
Neovim tân trang lại hỗ trợ clipboard. Việc xây dựng trong giao diện đã được gỡ bỏ và thay thế bằng một hệ thống gọi một tiện ích bên ngoài như xclip
, xsel
hoặc
pbcopy
/ pbpaste
.
Nó sẽ tự động nhận các tiện ích này và sử dụng chúng. Trên OS X pbcopy
và pbpaste
phải có sẵn theo mặc định, trên Linux bạn có thể muốn cài đặt xclip
, vì đó là
phiên bản có sẵn rộng rãi nhất (thực tế có hai phiên bản xsel
có cờ không tương thích . Điều này thực sự ngu ngốc).
Cũng thấy :help clipboard
trong Neovim.
"<Space>
để có được "
. Vì vậy, trong những trường hợp bạn sẽ phải nhấn "<Space>+y
hoặc "<Space>*y
sao chép.
"
có thể chọn nhiều thanh ghi có tên. "+
không phải là phép thuật, nó chỉ là đăng ký +
. Vì vậy, ví dụ, nếu bạn muốn sao chép ba điều cùng một lúc và dán từng người từng người một, bạn có thể "1y
, "2y
và "3y
và sau đó "1p
, "2p
và "3p
. Điều này thực sự mạnh mẽ và không tồn tại trong hầu hết các trình soạn thảo khác. Một cách sử dụng thú vị khác là nhìn vào các macro được lưu trữ. Ví dụ: nếu bạn ghi lại qq
, nhưng bạn nhận ra rằng bạn cần sửa nó, bạn có thể: trong một dòng tạm thời "qp
, sửa nó và "qd
.
Các câu trả lời khác bao gồm cách sao chép văn bản từ bộ đệm của bạn vào bảng tạm hệ thống. Một hoạt động phổ biến khác là sao chép văn bản từ một thanh ghi khác vào clipboard. Ví dụ: nếu bạn đã kéo một số văn bản vào "
(thanh ghi mặc định), bạn có thể muốn tải thanh ghi đó vào bảng tạm.
Bạn có thể làm điều này với :let
:
let @+=@"
- sao chép thanh ghi mặc định vào clipboardlet @*=@"
- sao chép thanh ghi mặc định vào lựa chọn chính X11 ("bảng tạm chuột")let @+=@a
- sao chép từ đăng ký a
vào clipboardLưu ý rằng điều này hoạt động cho các thanh ghi nói chung: let @a=@b
bản sao đăng ký b
để đăng ký a
.
Từ http://vim.wikia.com/wiki/Accessing_the_system_clipboard
set clipboard=unnamedplus
Điều này thay đổi thanh ghi Vim mặc định thành +
thanh ghi, được liên kết với bảng tạm hệ thống. Từ :h clipboard-unnamedplus
:
clipboard-unnamedplus
unnamedplus A variant of the "unnamed" flag which uses the
clipboard register '+' (quoteplus) instead of
register '*' for all yank, delete, change and put
operations which would normally go to the unnamed
register. When "unnamed" is also included to the
option, yank operations (but not delete, change or
put) will additionally copy the text into register
'*'.
Only available with the +X11 feature.
Availability can be checked with:
if has('unnamedplus')
:version
trong Vim để xem + X11 có xuất hiện trong danh sách các tính năng được bao gồm không. Bạn cũng có thể kiểm tra xem tính năng 'unnamedplus' có khả dụng với :if has('unnamedplus')⏎ echo 'yes'⏎ endif
Nếu bạn không có trên Linux thì bạn nên sử dụng chưa đặt tên thay vì không tên.
Trên các bản dựng hỗ trợ nó, thanh ghi có tên *
là bảng tạm hệ thống. Để sao chép văn bản từ Vim vào bảng tạm hệ thống, bạn có thể chọn văn bản bằng chế độ trực quan, sau đó nhấn "*yđể sao chép nó vào bảng tạm hệ thống.
Ngược lại, sử dụng "*pđể dán văn bản từ bảng tạm hệ thống vào Vim.
Tôi khuyên bạn nên sử dụng Gvim và thêm phần này vào .vimrc
:
source $VIMRUNTIME/mswin.vim
behave mswin
Điều này cho phép hỗ trợ cho CtrlC, CtrlX, CtrlVnhư notepad trong Windows.
Lưu ý rằng điều này cũng sẽ thêm một số phím tắt phổ biến khác của Windows, như CtrlScho :w
, CtrlAđể chọn tất cả, v.v.
Mỗi câu trả lời khác đã bao gồm tất cả những điều quan trọng về các thanh ghi. Tôi muốn thêm một điều nữa mà tôi sử dụng.
Có một cách trong Vim để sao chép trực tiếp văn bản được chọn trực quan vào bảng tạm. Chỉ cần đặt nó trong tập tin vimrc của bạn :
set guioptions+=a
Và, với điều này bất cứ khi nào bạn trực quan chọn một số văn bản, nó sẽ được sao chép vào clipboard của bạn. Để biết thêm thông tin về điều này,:help guioptions
BTW, điều này chỉ dành cho gVim.
guioptions+=a
cũng được đề cập trong câu trả lời của Carpetsmoker.
Bạn cũng có thể sử dụng lệnh toàn cục để đặt một số mẫu cụ thể vào bảng tạm. Nó có thể hữu ích trong các tình huống mà bạn có thông tin nằm rải rác trong một tệp và việc đối phó thủ công dễ bị lỗi và mệt mỏi.
Đầu tiên làm sạch sổ đăng ký sẽ nhận được thông tin
:let @a=""
Sau đó sao chép tất cả các dòng chứa mẫu cho nó
:g/pattern/yank A
Cuối cùng tranfereing (sao chép) thông tin vào bảng tạm hệ thống
:let @+=@a
nếu bạn cố sao chép trực tiếp mọi dòng chứa "mẫu" vào bảng tạm thì nó sẽ không hoạt động vì bảng tạm không có khả năng nối thêm nội dung mới, do đó chúng tôi đang sử dụng ở đây một thanh ghi vim bình thường để lưu trữ tất cả các dòng có chứa mô hình cùng một lúc và sau đó đặt nó vào clipboard.
OBS: Cần phải ghi lại đăng ký trước khi sử dụng và việc sử dụng phiên bản UPPERCASE của đăng ký cho phép chúng tôi chắp thêm nội dung, nếu không nó cũng không hoạt động.
Nếu bạn không thể tìm ra cách để +clipboard
làm việc, mà tôi không thể vì một số lý do, thì bạn có thể làm điều này.
Giả sử bạn chỉ muốn sao chép một phần của tệp, tôi thực hiện shift
+ v
để chuyển sang chế độ trực quan và chỉ làm nổi bật các dòng tôi muốn sao chép. Sau đó, tôi làm điều này.
# Linux Wayland
:'<,'>w !wl-copy
# Linux Xorg
:'<,'>w !xclip -selection clipboard
Giải trình
'<,'>
- có nghĩa là bạn đã sử dụng chế độ trực quan để chọn một phạm vi (bạn không gõ này)w !{cmd}
- viết phạm vi cho stdin của cmd
, xem thêm tại:help w_c
wl-copy
và xclip
là các chương trình mà bạn có thể dẫn văn bản đến và họ sẽ thêm nó vào bảng tạm hệ thống của bạnNgoài ra, một khi điều này là trong lịch sử của bạn, bạn không phải gõ lại toàn bộ. Chỉ cần chọn với chế độ trực quan, gõ w
rồi nhấn lên và lệnh sẽ tự động hoàn tất. Ngoài ra, bạn cũng không phải sử dụng chế độ trực quan. Bạn có thể đặt bất kỳ phạm vi nào bạn muốn.