Luôn luôn sử dụng: thiết lập dán, Đó có phải là một ý tưởng tốt?


18

Trong một vim đầu cuối, việc dán dữ liệu clipboard thường làm rối mã thụt lề. Tôi chỉ biết nếu tôi sử dụng :set pastethụt lề không bị hỏng. Mặc dù, sau khi dán dữ liệu, tôi có nên làm :set nopastelại không? Nếu tôi không, vấn đề gì xảy ra?


Còn cố gắng cho bản thân thì sao? Hoặc đọc tài liệu ?
romainl

1
Xem thêm "Chế độ dán khung" trong câu trả lời của tôi về "Dán mã vào cửa sổ đầu cuối vào vim" stackoverflow.com/a/7053522/754997 . Nếu trình giả lập thiết bị đầu cuối của bạn hỗ trợ nó, bạn có thể sắp xếp để yêu cầu Vim tự động chuyển sang / từ chế độ dán bất cứ khi nào bạn dán văn bản vào thiết bị đầu cuối.
Chris Trang

1
@romainl Tôi thấy khá hợp lý khi cả 1) cố gắng và chờ xem liệu có hậu quả tiêu cực nào khi luôn sử dụng set paste (+ - nopaste) và 2) rtfm-ing (với tư cách là người dùng cấp thấp hơn hoặc trung cấp như OP) , ít hữu ích hơn so với việc hỏi những người có kinh nghiệm với các tùy chọn. Hỏi ở đây có vẻ là một cách tiếp cận thông minh hơn, và tài liệu này sẽ giúp những người khác.
belacqua

Câu trả lời:


5

Như những người khác đã viết, bạn không muốn để lại 'dán'. Tôi chỉ muốn chỉ ra rằng với một trình giả lập thiết bị đầu cuối tốt và được biên dịch và cấu hình đúng vim, bạn không cần phải thay đổi 'dán'. Bạn cần một trình giả lập thiết bị đầu cuối tốt như xterm hoặc Gnome Terminal, vim có tính năng X11 đi kèm và tùy chọn 'chuột' được đặt thành 'a'. Sau đó vimsẽ "biết" khi bạn dán chuột và sẽ thiết lập và bỏ cài đặt tùy chọn 'dán' một cách hiệu quả cho bạn.

Một cách để có được vimtính năng X11 là chạy gvimvới -vtùy chọn hoặc tạo bí danh,

alias vim='gvim -v'

Sau đó đặt

set mouse=a

trong ~ / .vimrc của bạn.


Khi tôi đặt mouse = a, tôi không thể sao chép văn bản. "Sao chép" được tô xám trong menu chuột phải và trong menu ứng dụng.
Lee Daniel Crocker

@LeeDanielCrocker: Copysẽ có màu xám hoặc hoàn toàn không hiển thị trừ khi một số văn bản đã được chọn. Làm thế nào bạn chọn văn bản sẽ được sao chép?
garyjohn

Chỉ với chuột. FYI, "y" hoạt động tốt ... sắp xếp văn bản và sao chép nó vào bàn phím hệ thống. Đó chỉ là những thực đơn không hoạt động. Nếu chuột được đặt thành "r", thì các menu sẽ hoạt động, nhưng chuột bao gồm các số dòng. Vì vậy, tất cả trong tất cả, tôi có thể sống với chuột = a, tôi chỉ cần nhớ để thay vì sao chép.
Lee Daniel Crocker

7

Bài đăng này có câu trả lời yêu thích của tôi, https://coderwall.com/p/if9mda/automatically-set-paste-mode-in-vim-when-pasting-in-insert-mode

Về cơ bản nếu bạn bắt đầu ở chế độ Chèn và sử dụng Ctrl + Shift + V hoặc nhấp chuột phải bằng chuột, Vim phát hiện ra rằng điều này đến từ một thiết bị đầu cuối và tự động thiết lập chế độ dán, sau đó bỏ cài đặt nó một lần, vì vậy bạn không bị mất phím (không thể hoạt động ở chế độ dán vì nó ghi dữ liệu thô) và bạn trở lại trạng thái "lành mạnh" khi hoàn thành.

Đối với chỉ vim (đặt .vimrc của bạn)

let &t_SI .= "\<Esc>[?2004h"
let &t_EI .= "\<Esc>[?2004l"
inoremap <special> <expr> <Esc>[200~ XTermPasteBegin()

function! XTermPasteBegin()
  set pastetoggle=<Esc>[201~
  set paste
  return ""
endfunction

Nếu bạn sử dụng vim trong Tmux (vẫn đi vào .vimrc)

function! WrapForTmux(s)
  if !exists('$TMUX')
    return a:s
  endif

  let tmux_start = "\<Esc>Ptmux;"
  let tmux_end = "\<Esc>\\"

  return tmux_start . substitute(a:s, "\<Esc>", "\<Esc>\<Esc>", 'g') . tmux_end
endfunction

let &t_SI .= WrapForTmux("\<Esc>[?2004h")
let &t_EI .= WrapForTmux("\<Esc>[?2004l")

function! XTermPasteBegin()
  set pastetoggle=<Esc>[201~
  set paste
  return ""
endfunction

inoremap <special> <expr> <Esc>[200~ XTermPasteBegin()

Tôi giả sử một trong những let &t_SI .= "\<Esc>[?xxxxx"dòng đang phát hiện phím tắt dán bàn phím? Điều này có làm việc cho mac cũng được cung cấp các phím tắt khác nhau?
ngờ1ejack

@ myst1ejack Đây thực sự là phát hiện các chuỗi thoát Xterm, chứ không phải cách chúng được gọi (ví dụ 2004h là dán bắt đầu), miễn là thiết bị đầu cuối của bạn hỗ trợ mã khóa Xterm và chuyển chúng qua Vim, nó sẽ hoạt động tốt trên Mac.
dragon788

Chúa ơi. bạn là người hùng của tôi. Tôi đã gõ như vậy: thiết lập nopaste rất nhiều lần.
maxwell

3

Như romainl đã đề xuất, tài liệu giải thích rằng việc đặt 'paste'tùy chọn sẽ vô hiệu hóa một số tùy chọn khác và bạn chắc chắn sẽ thấy rằng sớm hơn là nó sẽ gây ra vấn đề cho bạn. Vì lý do này, có 'pastetoggle'tùy chọn. Xem:

:help 'paste'
:help 'pastetoggle'

1

Nếu một cái gì đó tồn tại, nó phải có ý nghĩa của nó. Bạn nên xem kỹ tài liệu vim rất hữu ích.

  :help 'paste'
  :help 'pastetoggle'

Khi bạn đọc, bạn có thể muốn điều này:

" Toggle paste mode
"   (prefer this over 'pastetoggle' to echo current state)
nmap <leader>p :setlocal paste! paste?<cr>

Tôi hy vọng bạn thấy bài viết này hữu ích :)


1

IIRC khi bạn dán vào vim, về cơ bản nó nghĩ rằng bạn đã tự gõ tất cả các ký tự đó. Vì vậy, nếu tự động thụt lề được bật, nó sẽ thụt lề cho bạn, nhưng văn bản được dán thường chứa thụt lề để thực sự thụt lề bị "làm rối". Chuyển sang chế độ dán sẽ tắt các thứ như tự động thụt lề.

Nếu bạn thích tự động thụt lề như bạn, bạn nên chuyển nó trở lại thành nopaste sau khi bạn dán xong. Hãy thử nó và lưu ý cách bạn phải thực hiện tất cả các vết lõm bằng tay trong chế độ dá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.