Cách sao chép nội dung dán trong trình soạn thảo vi


165

Tôi đã thử sử dụng Ctrl+ Vđể dán nội dung trong tài liệu soạn thảo vi, nhưng Ctrl+ Vkhông được hiểu là dán.


16
Xin lưu ý, lý do chính để sử dụng Vi là vì Vim chưa được cài đặt. Nếu bạn đã cài đặt Vim, có lẽ nó đáng để sử dụng thay thế. Vi thực sự không có lợi thế gì ngoài việc nó đã có mặt trên mọi bản cài đặt Unix. Theo tôi, cách tốt nhất để học Vim là mở trình giả lập thiết bị đầu cuối của bạn (không phải từ bên trong Vim) và gõ vimtutorNó sẽ giúp bạn tăng tốc đến nơi có thể sử dụng cho bạn trong khoảng 45 phút.
Ben Mordecai

1
+1 @BenMordecai - Tôi đã quen với vi (từ cũ), bao gồm khả năng vỏ phụ tiện lợi của nó, nhưng cần làm mới. Một chút tuyệt vời của gia sư. Đi qua nó như một làn gió. Cảm ơn.
Cbhihe

Câu trả lời:


192

Trước tiên, hãy đảm bảo bạn đang ở chế độ chỉnh sửa (nhấn i). Sau đó, bạn có thể dán bằng Ctrl+ Shift+ V, nếu bạn đang ở trong trình giả lập thiết bị đầu cuối như gnome-terminal(hoặc chọn "Dán" từ menu chuột phải).

Bạn cũng có thể nhập :set pastevim trước khi dán để tắt thụt lề tự động, vv Sau đó, :set nopastesau khi bạn đã dán nội dung.

Đồng thời kiểm tra câu hỏi này trên stackoverflow.com để biết thêm thông tin.

Nếu bạn muốn sao chép / dán các dòng vào vim(trái ngược với dán nội dung clipboard), bạn sẽ muốn kiểm tra lệnh yank . Đây là một bảng cheat có thể giúp đỡ.


1
Tôi nghĩ rằng nếu bạn có con trỏ chuột trên, bạn không thể dán bằng Ctrl + Shift + V.
Alvin Wong

14
Chỉ cần một lưu ý, Itrường hợp nhạy cảm. Chữ thường ilà cách thông thường để vào chế độ chèn. Capital Iđưa con trỏ đến đầu dòng và sau đó đưa bạn vào chế độ chèn.
Ben Mordecai

64

Vi (và Vim) hoạt động rất khác so với trình soạn thảo văn bản thông thường như Gedit. Nó cũng có một đường cong học tập khá dốc. Nếu bạn muốn tìm hiểu một số lệnh cơ bản, hãy bắt đầu với hướng dẫn tương tác này .

Tuy nhiên, để trả lời câu hỏi của bạn. Nội dung của bảng tạm hệ thống có thể được truy cập thông qua thanh ghi cộng. Vì vậy, để dán một cái gì đó từ bảng tạm hệ thống, bạn có thể, từ chế độ Bình thường, nhấn: "+p(Không phải cùng lúc, nhưng lần lượt từng cái một).


3
Đây là điều mà tôi không biết cho đến bây giờ. Ngoài ra, +1 để liên kết một hướng dẫn vim tuyệt vời khác.
Attila O.

19
Nói về các đường cong học tập cho các biên tập viên, có "các đường cong học tập cổ điển cho một số biên tập viên phổ biến", blog.thilelli.net/public/store/attached/curves.jpg .
hlovdal

Trong Gnome Terminal, các phím tắt để sao chép và dán lần lượt là Ctrl-Shift-C và Ctrl-Shift-V.
Flimm

1
Tôi đã cố gắng nhấn lần lượt <kbd> "</ kbd>, <kbd> + </ kbd> và <kbd> p </ kbd>, cũng <kbd>" </ kbd> và <kbd> p < / kbd> và không có gì xảy ra. Tôi đã làm gì sai? Tôi vikhông sử dụngvim
user907860

1
Đó là câu trả lời đúng. Sử dụng ví dụ. Ctrl-Shift-v sẽ chỉ hoạt động với những nội dung đơn giản nhất (ngắt dòng và thụt lề có thể thực sự sai nếu bạn ở trong thiết bị đầu cuối và bạn quên sử dụng set :paste).
rsenna

29
  1. Nếu bạn muốn sao chép nội dung dán trong cùng một tệp , hãy sử dụng yankpaste.

  2. Nếu bạn muốn sao chép nội dung dán trên các thiết bị đầu cuối , hãy mở tệp đầu tiên, kéo dài văn bản bạn muốn, sau đó mở tệp thứ hai trong vim (ví dụ :tabnew /path/to/second/file) và nhấn pđể dán.

  3. Nếu bạn muốn sao chép nội dung dán từ vim sang chương trình bên ngoài , bạn cần truy cập vào bảng tạm hệ thống. Tôi giả sử bạn sử dụng Ubuntu. Phiên bản GUI của vim luôn có hỗ trợ clipboard, tuy nhiên, nếu bạn muốn sử dụng Vim từ thiết bị đầu cuối, bạn sẽ phải kiểm tra hỗ trợ X11-clipboard.

    Từ bàn điều khiển, gõ:

    $ vim --version | grep xterm
    

    Nếu bạn tìm thấy -xterm_clipboard , bạn có hai tùy chọn:

    1) Tự biên dịch vim, với cờ xterm_clipboard trên

    2) Gỡ cài đặt vim, cài đặt gvim (vim-gtk hoặc vim-gnome) thay thế. Bạn có thể dính vào vim không gui bằng cách gọi vim từ thiết bị đầu cuối, giống như cách bạn đã làm trước đây. Lần này khi bạn kiểm tra, bạn nên tìm + xterm_clipborad .

    Bây giờ, khi bạn lấy một số văn bản trong thanh ghi + bên trong trình soạn thảo vim của bạn (ví dụ: "+ yy), nó cũng sẽ được sao chép vào bảng tạm hệ thống mà bạn có thể truy xuất từ ​​chương trình bên ngoài như trình soạn thảo gedit, bằng cách sử dụng Ctrl+ V.

  4. Nếu bạn muốn sao chép nội dung dán từ chương trình bên ngoài vào vim , trước tiên hãy sao chép văn bản của bạn vào bảng tạm hệ thống qua Ctrl+ C, sau đó ở chế độ chèn trình chỉnh sửa vim , nhấp vào nút giữa chuột (thường là bánh xe) hoặc nhấn Ctrl+ Shift+ Vđể dán.

    Đây là 4 điều kiện sao chép & dánbản liên quan đến vim. Tôi hi vọng cái này giúp được.


Điểm của: tabnew / path / to / second / file là gì? Bạn có thể đạt được chính xác cùng một thứ yanking / sao chép / cắt trong tệp đầu tiên, mở tệp thứ hai với: vi / path / to / second / file và dán (p / P) trong đó. Ít nhất là trong trường hợp của tôi ... Hoặc là vì tôi đã bật tính năng + xterm_clipboard vim? Hoặc có nhiều hơn để tabnew hơn chỉ có vậy?
Cbhihe

1
Trên Ubuntu vim-gtkxterm_clipboardhỗ trợ và trên Fedora xvimcó nó.
icc97

18

Tôi luôn sử dụng Shift+ Insertkhi tôi muốn dán văn bản vào thiết bị đầu cuối, hoạt động trong tất cả các chương trình thiết bị đầu cuối.

(Đó cũng là lý do tại sao tôi không bao giờ nhận được máy tính xách tay mà bạn không thể nhấn Insertmà không nhấn phím phụ)


2
Vi/ Vim! = thiết bị đầu cuối;)
0xC0000022L

1
ok ok, nhưng nó vẫn hoạt động :)
Magnus Jonsson

1 cho điều này .. Những gì bạn sử dụng để thực hiện tiếng nói Ctrl+A, Ctrl+Ccũng?
Arup Rakshit

Nếu tôi sử dụng thiết bị đầu cuối bên trong DE, tôi thường chỉ chọn văn bản bằng chuột và sao chép bằng Ctrl + Shift + C.
Magnus Jonsson

Shift + Chèn cũng hoạt động trong gvim. (Tôi đang chạy Ubuntu 13.10, nếu điều đó tạo ra sự khác biệt.)
eksortso

10

Sử dụng nút giữa của chuột để chèn văn bản bạn đã tô sáng ở nơi khác.

Nó rất hữu ích khi bạn không có quyền truy cập vào bảng tạm hệ thống của mình (ví dụ: trong phiên SSH từ xa).

Phải ở chế độ chỉnh sửa / chèn cho Vim.


6

Khi bạn nhập vi, nhấn iđể vào chế độ chèn, nhấp chuột phải vào thiết bị đầu cuối, nhấp vào dán.


Tôi nghĩ là trường hợp thấp hơn i. Trường hợp trên Ilàm gì?
Flimm

@Flimm đã được giải thích trong một bình luận của Ben Mordecai về một câu trả lời khác.
sierrasdetandil

Tôi đã chỉnh sửa câu trả lời thành chữ thường i. Chữ hoa Idi chuyển con trỏ đến đầu dòng trước khi vào chế độ chèn, không cần thiết ở đây.
Flimm

6

Hướng dẫn chi tiết để sao chép / dán các dòng văn bản trong vi bằng cách sử dụng yankput

(sử dụng như sau trong chế độ lệnh của vi)

Sao chép (YANK)

Để sao chép một dòng trong vi:

  • Trong chế độ lệnh, di chuyển con trỏ đến dòng cần sao chép và nhập yyhoặc gõY

Để sao chép 2 dòng trong vi:

  • Trong chế độ lệnh, di chuyển con trỏ đến dòng đầu tiên cần sao chép và nhập 2yyhoặc gõ2Y

(tương tự, bất kỳ số lượng dòng có thể được sao chép)

Để sao chép tất cả các dòng từ vị trí hiện tại đến cuối tệp:

  • Trong chế độ lệnh, di chuyển con trỏ đến dòng đầu tiên cần sao chép và nhập yG

Để sao chép tất cả văn bản từ vị trí hiện tại đến cuối từ hiện tại:

  • Trong chế độ lệnh, di chuyển con trỏ đến vị trí từ nơi văn bản cần được sao chép và nhập yw

Để sao chép tất cả văn bản từ vị trí hiện tại đến cuối dòng:

  • Trong chế độ lệnh, di chuyển con trỏ đến vị trí từ nơi văn bản cần được sao chép và nhập y$

Dán (PUT)

Để dán văn bản vào bảng tạm - sau vị trí của con trỏ:

  • Trong chế độ lệnh, gõ p

Để dán văn bản vào bảng tạm - trước vị trí của con trỏ:

  • Trong chế độ lệnh, gõ P

1

Tôi gặp sự cố vì cài đặt Vim của tôi không hỗ trợ bảng tạm :

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

Tôi đã cài đặt vim-gnome (hỗ trợ bảng tạm) 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.


Điều này đã khắc phục vấn đề của tôi!
astrojuanlu

1

Với Vim 8+ trên Linux hoặc Mac, giờ đây bạn có thể chỉ cần sử dụng dán gốc của HĐH ( ctrl+shift+Vtrên Linux, cmd+Vtrên Mac). Không nhấn icho Chế độ chèn.

Nó sẽ dán nội dung của bảng tạm hệ điều hành của bạn, giữ nguyên các khoảng trắng và các tab mà không cần thêm tự động. Nó tương đương với cái cũ :set paste, i, ctrl+shift+V, esc, :set nopastephương pháp.

Bạn thậm chí không cần các tính năng +clipboardhoặc +xterm_clipboardvim được cài đặt nữa. Tính năng này được gọi là "dán khung". Để biết thêm chi tiết, hãy xem https://stackoverflow.com/questions/2514445/turn-off-auto-indent-when-pasting-text-into-vim/56781763#56781763


Đó là câu trả lời tôi đang tìm kiếm. Vì Vim không được mặc định trên các bản phân phối gnu / linux, nên nó cần được cài đặt ngay cả trong ubfox. Ngoài ra, các nút lên xuống của Vi không hoạt động trên Ubuntu và không có điểm nhấn.
itnotmyrealname

0

Nếu bạn đã root : Ctrl+ Shift+V

Nếu bạn không root : Center bấm chuột.


0

Tôi chỉ muốn lưu ý rằng sử dụng Vim qua Git Bash trên Windows, bạn chỉ có thể sử dụng phoặc nhấp chuột giữa mà không ở chế độ chèn. Sử dụng Vim thông qua PuTTY , bạn có thể chỉ cần nhấp chuột phải. Và làm nổi bật không sao chép.

Tôi đã lưu ý điều này bởi vì tôi đến đây không thấy rằng đây là SE cho Ubuntu.

Các lệnh hữu ích khác:

  • yy(# dòng) - yank (bản sao)
  • dd(# dòng) - xóa
  • p - dán dòng dưới dòng hiện tại
  • Shift+ p- dán dòng trên dòng hiện tại
  • u - hủy bỏ
  • r - làm lại
  • i - chế độ chèn
  • v - chế độ trực quan

Điều đó không làm việc cho tôi trên Windows Git Bash. Bạn đang sử dụng bàn điều khiển nào, mintty hoặc windows cmd?
wvducky

Tôi tin rằng đó là bạc hà.
Tyler Christian

0

Bạn có thể sử dụng Ctrl+ Shift+ Vđể dán trong phiên bản đầu cuối vim, nhưng đối với phiên bản GUI vim như Neovim-Qt, dán văn bản từ bảng tạm hệ thống với Ctrl+ Shift+ Vđơn giản là không hoạt động. Bạn phải truy cập vào bảng tạm "+hoặc "*trong trình soạn thảo vim.

Thêm keybinding mới vào .vimrcsẽ đơn giản là các lệnh sao chép / dán:

" paste from system clipboard, align indentation with surroundings
noremap <Leader>p "*]p:set nopaste<CR>
" copy a sentence into system clipboard
noremap <Leader>y "+y)
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.