Làm cách nào tôi có thể sao chép / dán văn bản mới mà không cần thụt lề tự động ở mỗi dòng mới?


7

Làm thế nào để tôi dán bây giờ:

  1. Nhấp chuột phải / Sao chép hoặc chỉ đơn giản là tô sáng.
  2. Nhấp chuột phải / Dán hoặc Nhấp chuột giữa hoặc CTRL + SHFT + V
  3. Các vết lõm xuất hiện ở các khoảng tăng dần: 0, 2, 4, 6, +

Câu hỏi trong tầm tay:

Từ nghiên cứu trước đây, tôi thấy rằng giải pháp nhanh và bẩn đang nhập vào phần sau trong .vimrctệp của mình : set paste. Tuy nhiên, những người đề xuất lệnh đó nói rằng set pasteảnh hưởng đến các cài đặt khác. (Tắt đầu tôi, tôi quên mất.)

Tôi muốn biết tùy chọn nào tôi có thể đặt mà chỉ cần dán mà không cần thụt thêm. Nếu điều đó kết thúc'paste' , thì tôi muốn biết chính xác lệnh đó làm gì.

Tôi chỉ thấy một sự khác biệt. Khi ở Vim, -- INSERT --trở thành-- INSERT (paste) --


Bạn đang dán trong khi ở chế độ Chèn? Trong chế độ Bình thường, tôi luôn nhận được thụt lề như trong văn bản được kéo dài, trừ khi tôi dán ]p, dán và điều chỉnh thụt lề là chính xác.
Gonçalo Ribeiro

Câu trả lời:


11

OK, đây là một đoạn mồi "yank & put"

Trong Vim, các lệnh chính cho yanking (sao chép) và đặt (dán) là yp.

Yanking đặt văn bản kéo dài trong một sổ đăng ký. Thanh ghi đó là thanh ghi không tên ", theo mặc định, nhưng người ta có thể sử dụng các thanh ghi khác:

"ay    " yank into register a
"by    " yank into register b
"+y    " yank into clipboard register
[…]

Tương tự, đặt văn bản chèn từ một thanh ghi. Thanh ghi đó là thanh ghi không tên theo mặc định nhưng người ta có thể sử dụng các thanh ghi khác:

"ap    " put from register a
"+p    " put from clipboard register
"3p    " put from the register 3
[…]

Các lệnh đó được ưu tiên là "Nhấp chuột phải / Dán hoặc Nhấp chuột giữa hoặc CTRL + SHFT + V" vì văn bản được "đặt" vào bộ đệm mà không có bất kỳ xử lý đặc biệt nào. Với "Nhấp chuột phải / Dán hoặc Nhấp chuột giữa hoặc CTRL + SHFT + V", văn bản được chèn vào bộ đệm như thể bạn đã nhập nó và do đó có thể thụt lề / định dạng tự động.

Nếu bạn không thể sử dụng "+phoặc "*p- làm việc trên SSH mà không chuyển tiếp X hoặc Vim được xây dựng mà không có hỗ trợ clipboard - pastetùy chọn sẽ vô hiệu hóa thụt lề tự động và một loạt các tùy chọn rất hữu ích khác để văn bản đã nhập của bạn không bị xóa.

Như đã lưu ý :help 'paste, các tùy chọn có khả năng gây ra tác dụng phụ rất xấu, vì vậy điều quan trọng là phải tắt nó ngay sau khi bạn dán văn bản của mình:

:set paste
(paste)
:set nopaste

Điệu nhảy đó rõ ràng là một cơn đau ở mông, vì vậy có một tùy chọn khác cho phép bạn xác định một phím tắt đặc biệt để chuyển đổi paste:

set pastetoggle=<F12>

Điều đó làm giảm đau một chút:

<F12>
(paste)
<F12>

Nhưng nó vẫn là một nỗi đau.

Nếu bạn có thể, nên cài đặt Vim phù hợp với hỗ trợ clipboard để bạn có thể sử dụng "*phoặc "+p(tùy thuộc vào cách bạn sao chép văn bản của mình) để dán văn bản đúng cách .

  • Trên Mac OS X: cài đặt MacVim,
  • trên các hệ thống dựa trên Debian: cài đặt gói vim-gnome hoặc vim-gtk,
  • trên CentOS: cài đặt gói tăng cường vim.

Tài liệu tham khảo:

:help p
:help y
:help registers
:help 'paste'
:help 'pastetoggle'

1
Mô tả một cái gì đó là "đúng cách" mà không giải thích lý do hoặc cung cấp một ví dụ ngược lại là không hữu ích.
alxndr

1
Tôi đồng ý với một @alxndr. Trước hết, tôi không có Ubuntu, được nêu trong câu hỏi của tôi. Thứ hai, không có bối cảnh về cách sử dụng "*p. Tôi có gõ nó trong khi ở chế độ xem không? Hoặc thêm vào .vimrc?
onebree

@onebree Nó giống như p, nhưng để dán từ bảng tạm của hệ điều hành. Xem vi.stackexchange.com/q/84/205
muru

Hãy xác định rằng trong câu trả lời của bạn sau đó.
onebree


7

VIM có một cài đặt khác pastetogglexác định ánh xạ cho chế độ dán bật tắt. Đó là những gì bạn muốn làm và sau đó bạn có thể chỉ cần bật chế độ dán và sau đó dán.

Mặc dù tôi thấy rằng ít trực quan hơn và thường thấy ]plà cách tốt hơn để dán mã thay vì chỉ sử dụngp


6

Nếu bạn đang sử dụng trình giả lập thiết bị đầu cuối khá hiện đại, bạn có thể cài đặt plugin vim-ngoặced-paste .

Từ các tài liệu:

xterm, urxvt, iTerm2, gnome-terminal (và các thiết bị đầu cuối khác sử dụng libvte) được biết là hoạt động.

Sau khi cài đặt, bạn có thể chỉ cần dán như bình thường trong chế độ chèn, và nó sẽ chăm sóc cài đặt và bỏ cài đặt dán cho bạn.


Tôi là Gnome TERMINAL 3.8.4
onebree

Điều này sẽ làm việc cho bạn. Gnome Terminal đã hỗ trợ dán ngoặc trong một thời gian.
Jay Thompson

Một tùy chọn plugin khác: Vim-unimapired cung cấp yo/ yOtoán tử bắt chước oOtoán tử nhưng chỉ set pastecho đến khi thoát chế độ chèn.
Peter Rincker 19/2/2015

3

Để dán văn bản vào vim mà không tự động thụt lề, bạn cần đặt Vim ở chế độ Dán. Điều này rất hữu ích nếu bạn muốn cắt hoặc sao chép một số văn bản từ một cửa sổ và dán nó vào Vim. Điều này sẽ tránh được hiệu ứng bất ngờ. Xem: :help pasteđể biết thêm chi tiết.

Để làm cho cuộc sống dễ dàng hơn, có một pastetogglebiến chỉ định chuỗi khóa bật tắt tùy chọn 'dán' ( :set invpaste).

Ví dụ: nếu bạn muốn sử dụng F2để vô hiệu hóa tự động nếu dán vào thiết bị đầu cuối trong X, bạn có thể sử dụng mã sau vào .vimrctệp của mình :

nnoremap <F2> :set invpaste paste?<CR>
set pastetoggle=<F2>

1

Unimpaired.vim giải quyết vấn đề này theo cách hiệu quả nhất mà tôi đã thấy. Nó cung cấp một số ánh xạ để vào chế độ Chèn 'paste'được bật, sau đó tự động tắt nó khi bạn trở về chế độ Bình thường. yomở một dòng mới bên dưới con trỏ; yOở trên. (Chỉ thích oO.)

Plugin cũng cung cấp một bộ các ánh xạ hữu ích khác để điều hướng danh sách, thay đổi cài đặt chung và một số chuyển đổi văn bản tiện lợi. Các ánh xạ là mẫu mực: họ cảm thấy có nguồn gốc từ Vim mà không bước vào chức năng hiện có.

Tôi chỉ cung cấp các chi tiết trong đoạn trước vì nhiều người sẽ không muốn cài đặt một plugin để giải quyết vấn đề trong tay. Tuy nhiên, tôi nghĩ họ sẽ hài lòng với những thứ khác (không liên quan) mà Unimpaired.vim cung cấp.


1

Khi bạn ở trên máy chủ hoặc hệ thống nơi bạn không thể hoặc không muốn thay đổi cấu hình, cách nhanh nhất là

:i!

Điều này sẽ vào chế độ chèn với chế độ tự động tắt, nơi bạn dán văn bản của mình. Khi bạn kết thúc, bạn cần gõ

.

trên dòng riêng của mình để kết thúc chèn.

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.