Làm thế nào để sao chép dữ liệu giữa các trường hợp khác nhau của vim?


41

Nếu tôi sử dụng vim đầu tiên để sao chép một dòng (với yy), làm cách nào để dán vào vim của thiết bị đầu cuối khác p? Có bất kỳ lệnh hoặc cài đặt có thể làm điều đó? Tôi có thể sao chép và dán vào bảng tạm hệ thống toàn cầu không?

Tôi biết các cách sau là có thể, nhưng tôi muốn một cách đơn giản hơn:

  1. Tôi không muốn thoát vim thứ nhất và mở lại vim thứ hai.

  2. Tôi không muốn sử dụng cửa sổ riêng biệt (với :sp).

Câu trả lời:


49

Trước tiên, bạn phải cài đặt phiên bản vim kích hoạt clipboard. Để phù hợp với người dùng có môi trường phi đồ họa (ví dụ: người dùng Ubuntu Server) vimvim-tinykhông mắc vào khả năng này. Bạn sẽ muốn cài đặt GVim Cài đặt GVim , được khởi chạy bằng đồ họa hoặc trong thiết bị đầu cuối của bạn. GVim sẽ thay thế vimlệnh.

Bạn có thể kéo văn bản vào 'bộ đệm cắt' từ vim đầu tiên, sau đó dán văn bản vào vim thứ hai. Để sao chép vào bộ đệm cắt toàn cục, sử dụng thanh +ghi. Các "chìa khóa cho phép bạn chỉ định đăng ký để sử dụng khi thực hiện một yank hoặc dán phẫu thuật.

Trong vim đầu tiên, kéo một dòng vào thanh +ghi:

"+yy

sau đó, để dán từ thanh +ghi trong vim thứ hai:

"+p

Để biết thêm thông tin về các thanh ghi có sẵn, hãy kiểm tra :help registers. Bạn cũng có thể sử dụng "+pđể dán văn bản được sao chép từ bất kỳ nguồn nào khác trên hệ thống của bạn.


Đối với bất cứ điều gì nó có giá trị, nếu bạn cài đặt GVim (gói có thể được gọi là vim-gnome), các mục trong menu sẽ rất thường xuyên cung cấp cho bạn các phím tắt mà chúng sẽ gọi.
zpletan

1
Tôi không muốn cài đặt Gvim. Làm thế nào để tôi làm điều này trong vim?
trusktr

1
@trusktr thực sự điều này cũng hoạt động trong vim. Trong phần hỏi đáp này, bạn nói rằng bạn cần ít nhất vim 7.3.74 (có nghĩa là Ubuntu 11.10 trở lên).
thắt lưng

Điều này bằng cách nào đó không hoạt động nếu bạn có một vim bắt đầu bên trong tmux và một vim khác bắt đầu bình thường ở bên ngoài - bất kỳ cơ hội nào bạn biết làm thế nào để giải quyết vấn đề này?
serup

"*yy, "*pcũng hoạt động. nếu bạn nhấn :reg, bạn sẽ thấy đăng ký ngôi sao đó
elquimista

20

Giải pháp tốt nhất phù hợp với tôi (không yêu cầu tôi thay đổi thói quen bấm phím) tại đây: https://stackoverflow.com/questions/9166328/how-to-copy-selected-lines-to-clipboard-in- vim

chỉ cần đặt:

set clipboard=unnamedplus

trong của bạn .vimrc.


Tôi thực sự cần phải thêm set clipboard=unnamedplusvào kết hợp với cài đặt GVim. Tuy nhiên, tôi đã có thể sử dụng xfce4-terminal cho Vim thay vì chương trình GVim thực tế.
jbrock

9

Tôi thích giải pháp của Bill và tôi đã tạo ra một bản đồ:

vmap <leader>y :w! /tmp/vitmp<CR>                                                                   
nmap <leader>p :r! cat /tmp/vitmp<CR>

cái đầu tiên trong chế độ trực quan sao chép tất cả trong / tmp / vitmp và cái thứ hai sao chép nội dung từ / tmp / vitmp trong tệp


giải pháp đơn giản đơn giản - cách thức thời trang cũ - cảm ơn vì điều này đã giúp tôi
serup

Những gì tôi cần nhập vào Vim sau khi thêm nó vào .vimrc?
Vitaly Zdanevich

Bạn phải thiết lập vim để bạn có thể sử dụng khóa người lãnh đạo theo y để sao chép, khóa người lãnh đạo theo sau là p để dán.
Samir Sadek

1
Đây là một trong những công trình. việc sử dụng "*ydường như bị phá vỡ trên các máy chủ
ospider

Ôi trời. Tôi đã tìm kiếm hàng giờ về vấn đề này bằng cách sử dụng vim trong tmux trong docker. Vimrc bình thường của tôi đã có tên / chưa đặt tên, KHÔNG hoạt động trong vim trong tmux trong docker. Không làm bất cứ điều gì tôi tìm thấy trên internet. Tuy nhiên NÀY dường như hoạt động trên TẤT CẢ các máy! Trong docker, trên Mac và trên Arch nguyên bản. Cảm ơn bạn!!
Tommy

5

Tôi di chuyển giữa các máy gia đình Unix khác nhau và đã tìm thấy trình tự sau luôn hoạt động với tôi:

Trong phiên vi nguồn:

  1. Sử dụng ESC m ađể đánh dấu dòng đầu tiên
  2. Sử dụng ESC m bđể đánh dấu dòng cuối cùng
  3. Sử dụng :'a,'b w! xferđể ghi phạm vi vào một tệp cào

Trong phiên đích:

  1. Di chuyển con trỏ đến dòng chèn
  2. Sử dụng ESC :r xferđể đọc trong văn bản

Tôi biết nó không đẹp nhưng nó luôn hoạt động với tôi!


2

Nó thực sự khá đơn giản: cài đặt một phiên bản vimhỗ trợ clipboard. nếu vimkhông, hãy lấy một trong những thứ sau đây:

sudo apt-get install vim-athena
sudo apt-get install vim-gnome
sudo apt-get install vim-gtk

Sau khi cài đặt, chỉ cần chạy vim. Bạn cũng có thể xác minh rằng clipboard được bật bằng cách chạy:

 vim --version|grep clipboard

bạn sẽ thấy +xterm_clipboard.


Câu trả lời này đi vào trọng tâm của vấn đề, đó là phiên bản Vim của bạn có bật tính năng clipboard không? Nếu không, những câu trả lời khác sẽ không có sự khác biệt. Làm "vim --version" và tìm kiếm "+ clipboard". Tôi nghĩ + xterm_clipboard chỉ áp dụng nếu bạn muốn hỗ trợ clipboard X11 nhưng nếu bạn đang dùng Ubuntu, bạn cũng sẽ muốn điều này.
Ray

2

Bạn có thể sẽ ghét tất cả câu trả lời này. Tôi đã từng làm việc trong vi từ những năm 80 trên nhiều loại máy tính Unix và đã có dịp gần đây để chơi trên Linux.

Giải pháp cắt và dán của tôi là sử dụng Putty chạy trên Windows để truy cập vào hộp Linux của tôi.

Putty cho phép bạn sao chép bất kỳ txt nào trong cửa sổ của nó bằng cách làm nổi bật nó. sau đó bạn có thể đi đến một cửa sổ / phiên Putty khác và nhấp chuột phải để dán.

không thể dễ dàng hơn và bây giờ có vim. thật tệ khi điều đó không xảy ra vào thời của tôi, nó sẽ giúp tôi chống lại mafia.


1

Nó không chính xác bằng cách sử dụng yy, nhưng nếu bạn chọn văn bản bạn muốn sao chép bằng chuột (đôi khi bạn có thể cần sử dụng Shift- [kéo]), chuyển sang cửa sổ đầu cuối khác và thực hiện [nhấp chuột giữa] hoặc Shift- [giữa bấm vào đó, văn bản sẽ được chèn tại điểm chèn hiện tại của bạn.

Điều này hoạt động cho hầu hết các chương trình dòng lệnh và GUI, không chỉ cho vim.

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.