Có thể dán ở chế độ chèn trong Vim không?
Có thể dán ở chế độ chèn trong Vim không?
Câu trả lời:
Trong khi ở chế độ chèn nhấn CTRL-R {register}
Ví dụ:
CTRL-R *
sẽ chèn vào nội dung của clipboard CTRL-R "
(thanh ghi không tên) chèn lần xóa hoặc yank cuối cùng. Để tìm thấy điều này trong loại trợ giúp của vim :h i_ctrl-r
CTRL-R *
chỉ hoạt động trong GVIM hoặc các phiên bản được biên dịch để tương tác với x. Nhập vim --version
và tìm kiếm +xterm_clipboard
. Nếu bạn không có điều đó, bạn cần một phiên bản khác của vim. ( vim.wikia.com/wiki/Accessing_the_system_clipboard )
+clipboard
, nhưng nếu bạn có +xterm_clipboard
bạn nên có điều đó. Trên một số HĐH xterm_clipboard
không áp dụng được.
*
thanh ghi hệ thống X có thể dán được bằng cách nhấp chuột giữa trong khi +
là bản sao / dán truyền thống. Standard.freedesktop.org/clipboards-spec/clipboards-latest.txt
Nếu bạn không muốn Vim định dạng mangle trong văn bản được dán đến, bạn cũng có thể muốn xem xét sử dụng : :set paste
. Điều này sẽ ngăn Vim lập lại mã của bạn. Khi thực hiện dán, :set nopaste
sẽ trở lại hành vi bình thường.
Bạn cũng có thể chuyển đổi chế độ bằng một phím duy nhất, bằng cách thêm một cái gì đó giống như set pastetoggle=<F2>
vào .vimrc của bạn. Thông tin chi tiết về bật tắt tự động thụt lề có ở đây .
:set nopaste
sẽ tắt chế độ dán
:set paste!
Có thể thiết lập dán rất gần trong lịch sử lệnh của bạn, vì vậy bạn chỉ cần nhấn ':', sau đó mũi tên lên và thêm '!'.
:set paste!
Cảm ơn :)
!
vào cuối lệnh trong vim
Toggles lệnh và tắt. Bằng cách này, bạn không phải nhập :set nopaste
thay vào đó bạn có thể cuộn qua lịch sử của mình và chạy lại cùng một lệnh ( :set paste!
).
Không không trực tiếp. Những gì bạn có thể làm là nhanh chóng thoát khỏi chế độ chèn cho một hoạt động ở chế độ bình thường Ctrl-Ovà sau đó dán từ đó sẽ kết thúc bằng cách đưa bạn trở lại chế độ chèn.
Combo chính: Ctrl-O p
EDIT: Thú vị. Dường như có một cách như một số người khác đã liệt kê.
esc + p
?
esc + p + i
và chắc chắn dễ gõ hơnCTRL-R + "
CTRL-R "
. Chẳng hạn, mặc dù các cài đặt vimrc có thể thay đổi điều này, nhưng việc dán thứ gì đó vào một dòng mới bằng cách sử dụng CTRL-O p
làm cho vết lõm của nó biến mất.
Trong khi ở chế độ chèn, bạn có thể sử dụng Ctrl-R {register}
, nơi đăng ký có thể là:
+
cho bảng tạm*
cho bảng tạm X (văn bản được chọn cuối cùng trong X), "
đối với thanh ghi không tên (xóa lần cuối hoặc yank trong Vim),:h registers
).Ctrl-R {register}
chèn văn bản như thể nó được gõ.
Ctrl-R Ctrl-O {register}
chèn văn bản với thụt gốc.
Ctrl-R Ctrl-P {register}
chèn văn bản và tự động thụt lề nó.
Ctrl-O
có thể được sử dụng để chạy bất kỳ lệnh chế độ bình thường nào trước khi quay lại chế độ chèn, vì vậy
Ctrl-O "+p
cũng có thể được sử dụng, ví dụ.
Để biết thêm thông tin, xem tài liệu với :h i_ctrl-r
Bạn có thể sử dụng để dán từ clipboard với Ctrlv:
set pastetoggle=<F10>
inoremap <C-v> <F10><C-r>+<F10>
Và điều này để kéo lựa chọn trực quan vào clipboard với Ctrlc:
vnoremap <C-c> "+y
Nếu bạn cũng muốn sử dụng clipboard theo mặc định cho vim yanking / dán cổ điển ( y/ p) ở chế độ bình thường, đây là một tùy chọn cấu hình thực hiện:
set clipboard=unnamedplus
Với cấu hình này, trước tiên bạn có thể kéo dài ở chế độ bình thường và sau đó dán Ctrlvvào ở chế độ chèn. Ngoài ra, bạn có thể dán văn bản từ các trường hợp vim khác nhau và các ứng dụng khác nhau.
Một lựa chọn khác là:
set clipboard=unnamed
Sau đó, bạn sẽ có thể chỉ cần chọn một cái gì đó bằng cách kéo chuột trong môi trường X của bạn và dán nó vào vim sau đó. Nhưng (vì một số lý do) bạn sẽ không thể lấy một cái gì đó ( y) trong Vim và shiftinsertnó ở một nơi khác sau đó, điều này có lẽ khá hạn chế.
Vim tài liệu về điều này: http://vim.wikia.com/wiki/Accessing_the_system_clipboard
Để dán từ các thanh ghi tùy chỉnh, bạn có thể làm theo các câu trả lời khác :). Câu trả lời này chủ yếu là về việc tích hợp Vim với clipboard hệ thống của bạn.
Lưu ý rằng để set clipboard=unnamedplus
và set clipboard=unnamed
để làm việc, bạn cần sử dụng gvim hoặc vimx ( vim-X11
): Chúng được biên dịch với +xterm_clipboard
. Bạn có thể tùy ý đặt cái này vào .bashrc
bí danh của mình vim
bằng vimx
:
if [ -e /usr/bin/vimx ]; then
alias vim='/usr/bin/vimx'; # vim with +xterm_clipboard
fi
Bạn có thể tìm hiểu xem vim của bạn có +xterm_clipboard
thông tin được cung cấp hay không vim --version
.
:set paste
và byzantine <leader><leader> * y
thậm chí còn được mong muốn từ xa không? Không có vẻ quá cam kết, tôi thực sự tò mò những gì triết lý vim này phản ánh, hoặc nếu nó chỉ là một bất hạnh lịch sử.
inoremap <S-Insert> <F12><C-r>+<F12>
(Tôi sử dụng F12 làm pastetoggle). Cảm ơn.
Nếu bạn đặt Vim để sử dụng bảng tạm hệ thống ( :set clipboard=unnamed
), thì mọi văn bản bạn sao chép trong Vim đều có thể được dán bằng Shift+ Insert. Shift+ Insertchỉ đơn giản là tổ hợp phím dán trên toàn hệ điều hành ( Ctrl+ Insertlà 'bản sao' tương ứng).
p
dán văn bản trong clipboard?
Shift + Insert
để dán văn bản, chúng ta cần ở chế độ chèn.
Bạn cũng có thể sử dụng nút giữa chuột để dán ở chế độ chèn (chỉ dành cho Linux).
Bạn có thể vào -- INSERT (past) --
chế độ thông qua:
hoặc là
:set paste
và vào chế độ chèn ( :set nopaste
để tắt)một lần trong -- INSERT (past) --
chế độ chỉ cần sử dụng chức năng dán hệ thống của bạn (ví dụ: CtrlShiftvtrên Linux, Cmdvtrên Mac OS).
Chiến lược này rất hữu ích khi sử dụng vim qua ssh.
Đúng. Trong Windows Ctrl+ Vvà trong Linux, nhấn cả hai nút chuột gần như đồng thời.
Trong Windows tôi nghĩ dòng này trong _vimrc của tôi có thể thực hiện được:
source $VIMRUNTIME/mswin.vim
Trong Linux tôi không nhớ tôi đã làm như thế nào. Có vẻ như tôi có thể đã xóa một số dòng từ tệp .vimrc mặc định.
Một bản đồ tùy chỉnh có vẻ thích hợp trong trường hợp này. Đây là những gì tôi sử dụng để dán các mục đã nhúng trong chế độ chèn:
inoremap <Leader>p <ESC>pa
Leader
Chìa khóa của tôi ở đây là \
; điều này có nghĩa là nhấn \p
trong chế độ chèn sẽ dán các mục / dòng đã được đánh dấu trước đó.