Sao chép văn bản bên ngoài Vim bằng set mouse = a enable


232

Sau khi bật set mouse=a, văn bản được sao chép bên trong Vim sẽ không dán bên ngoài Vim. Có ai biết một cách để khắc phục điều này?

Tại đây, chọn văn bản bằng chuột sẽ bật chế độ trực quan và vô hiệu hóa Copytùy chọn trong menu bật lên:

nhập mô tả hình ảnh ở đây


2
Nếu vim của bạn được biên dịch với +clipboardmouse=a, bạn sẽ có thể sao chép / dán từ / sang vim mà không cần sử dụng menu bật lên của thiết bị đầu cuối. Bạn có thể kiểm tra nếu clipboardđược kích hoạt bằng cách sử dụng vim --version.
Jérôme Pouiller

@Jezz Đáng làm rõ rằng A) mouse=akhông phải là một tùy chọn biên dịch, đó là một cái gì đó trong vimrc B) Khi vim được biên dịch với +clipboardnó cho phép bạn sao chép / dán khi :set numberbật và không sao chép / dán các số, mặc dù có lẽ bạn vẫn phải thực hiện một số ánh xạ C) Người ta không phải tự biên dịch lại VIM, nó có thể xuất hiện trong vim trên một số trình quản lý gói được hỗ trợ bởi bất kỳ hệ điều hành nào .. Trên osx, vim của brew có mặc dù vim mặc định của osx không. Câu trả lời của tôi đề cập đến osx này.
barlop

Có thể cài đặt cũng hiệu xselquả với bạn, bạn có thể chọn văn bản bằng trình chỉnh sửa hoặc bằng chuột và nhấn ctrl+cđể sao chép văn bản, bằng cách này là dành cho neovim, github.com/neovim/neovim/issues/7945#issuecomment-361970165
Naeem Baghi

Câu trả lời:


426

Nhấn shifttrong khi chọn bằng chuột. Điều này sẽ làm cho lựa chọn chuột hoạt động như thể mouse=akhông được kích hoạt.

Lưu ý: thủ thuật này cũng áp dụng cho "dán nút giữa": nếu bạn muốn dán vào văn bản vim đã được chọn bên ngoài, hãy nhấn shifttrong khi nhấp vào nút giữa. Chỉ cần đảm bảo rằng chế độ chèn được kích hoạt khi bạn làm điều đó (bạn cũng có thể muốn :set pastetránh các hiệu ứng không mong muốn).

OS X (mac): giữ alt / tùy chọn trong khi chọn ( nguồn )


2
OK, đây thực sự là giải pháp. Nhưng nếu bạn muốn chọn nhiều mã nhiều hơn trên màn hình của bạn thì sao? (sau đó bạn phải cuộn và chọn cùng một lúc)
Ozkan

3
Ngoài ra còn có một tùy chọn để sử dụng chọn khối bằng cách nhấn <kbd> ctrl </ kbd> + <kbd> shift </ kbd> + nút chuột trái để bắt đầu chọn khối. Nút giữa chuột dán nội dung sao chép vào cửa sổ khác.
micrub

6
Nếu bạn có số dòng (như ảnh chụp màn hình hiển thị) thì khi chọn sử dụng ALT trên Mac OS X thì số dòng cũng được sao chép. Trong trường hợp này tốt hơn là sử dụng ALT + CMD khi chọn chế độ Chọn khối để bạn có thể tránh chọn số.
Aaron

16
Đối với Mac Terminal, sau OS X 10.11 El Capitan , Fnkhóa là cách phù hợp. Tức là, (có mouse=abật) chọn văn bản trong khi nhấn Fnphím, sau đó sử dụng CMD + C để sao chép và dán vào bất cứ nơi nào bạn muốn.
YaOzI

1
Tôi không biết làm thế nào câu trả lời có rất nhiều upvote. Nếu bạn bật hỗ trợ chuột để tránh sao chép số dòng thì đề xuất này hoàn toàn vô dụng.
Stelios Adamantidis

49

Sử dụng ", +, ysau khi thực hiện một lựa chọn hình ảnh. Dù sao thì bạn cũng không nên sử dụng lệnh sao chép của thiết bị đầu cuối, vì nó sao chép những gì thiết bị đầu cuối nhìn thấy thay vì nội dung thực tế. Đây là những gì nó làm:

  • ", +bảo Vim sử dụng thanh ghi có tên +cho lần xóa tiếp theo, kéo hoặc đặt. Thanh ghi có tên +là một thanh ghi đặc biệt, nó là thanh ghi clipboard X11. (Trên các hệ thống khác, bạn sẽ sử dụng *thay thế, tôi nghĩ, xem :help clipboard:help x11-selection)
  • y là lệnh yank, yêu cầu Vim đưa vùng chọn vào thanh ghi có tên trước đó.

Bạn có thể ánh xạ nó như thế này:

:vmap <C-C> "+y

Và sau đó làm nổi bật một cái gì đó bằng chuột và nhấn Control-Cđể sao chép nó.

Tính năng này chỉ hoạt động khi Vim đã được biên dịch với +xterm_clipboardtùy chọn. Chạy vim --versionđể tìm hiểu nếu nó có.


4
Hoặc có thể "*ytùy thuộc vào hệ điều hành.
frabjous

Điều đó đã làm việc! Tuy nhiên, sự kết hợp khá phức tạp, thực tế là 4 nút .. Có lẽ tôi cần ánh xạ cái khác trong khi sử dụng cách "shift" từ câu trả lời khác.
lyuba

Ánh xạ cũng hoạt động hoàn toàn tốt :) Bây giờ tôi không biết câu trả lời nào từ các bạn nên đánh dấu là đã chấp nhận :)
lyuba

2
Đối với tôi đây là một giải pháp tốt hơn câu trả lời được chấp nhận vì với phương pháp này, số dòng không được sao chép.
Saulo Silva

Thế còn +clipboard? Và những gì về +clipboardvới xterm_clipboardtắt?
barlop

18

Thay vì set mouse=asử dụng set mouse=rtrong .vimrc


1
Nhưng nó vô hiệu hóa cuộn
Makesh

3
Hãy nói tại sao. Nhìn thoáng qua, điều này về cơ bản giống như vô hiệu hóa hoàn toàn chế độ chuột, đây không phải là điểm của câu hỏi.
Mikel

@Mikel đúng, xem câu trả lời của tôi cũng có thể giúp câu trả lời của Josh Lee
barlop

Thật không may, điều này cũng sẽ sao chép số dòng nếu chúng được kích hoạt.
vikin9

17

Trên OSX sử dụng fnthay vì shift.


làm việc cho tôi với optionchìa khóa mà là alttương đương trọng trên hệ điều hành MacOS chủ. Đó là thiết bị đầu cuối từ xa trên debian9 mặc dù. không làm việc bằng cách thêm một trong hai set mouse=a/ set mouse=r/etc/vim/vimrctrên từ xa.
mrtipale

5

Trong Ubuntu, có thể sử dụng các liên kết sao chép và dán X-Term bên trong VIM (Ctrl-Shift-C & Ctrl-Shift-V) trên văn bản đã bị che khuất bằng phím Shift.


4

Một tùy chọn OSX-Mac khác là bỏ chọn View->Allow Mouse Reporting (hoặc nhấn-R để chuyển đổi nó.) Điều này cho phép bạn chuyển đổi giữa tương tác chuột và chọn chuột, có thể hữu ích khi chọn và sao chép / dán một vài bit vì bạn không có để giữ một phím bổ trợ để làm điều đó.

Lưu ý cho Multiline với số dòng:

Tôi thường bật số dòng vì vậy điều này cũng sẽ sao chép số dòng nếu bạn chọn nhiều dòng. Nếu bạn muốn sao chép nhiều dòng mà không có số dòng, hãy tắt các số :set nonuđó và sau đó bạn có thể :set nubật lại chúng sau khi sao chép xong.


1

Bạn có thể sử dụng :set mouse&trong dòng lệnh vim để cho phép sao chép / dán văn bản đã chọn bằng chuột. Sau đó, bạn có thể chỉ cần sử dụng nút chuột giữa hoặc shiftinsertđể dán nó.


Sau đó, khi bạn có :set numbernó nổi bật số. Vì vậy, không nhiều tốt. Vì vậy, bạn hoàn tác tốt công việc củaset mouse=a
barlop

1

Cài đặt biên dịch mà vim đã được biên dịch, là một phần của vấn đề. vim --versioncho thấy những điều này.

Trong OSX, vim mặc định có -clipboard Nhưng bạn cần+clipboard

Trên osx bạn có thể và dường như thường nên sử dụng macvim. Bạn có thể làm brew cask install macvim Điều đó có +clipboard.

Họ sẽ có hai vims.

~$ ls -l /usr/bin/vim   <--- default vim
-rwxr-xr-x  1 root  wheel  1745984 15 Jul  2017 /usr/bin/vim

~$ ls -l /usr/local/bin/vim   <-- macvim, installed recently via that mentioned brew line. 
lrwxr-xr-x  1 apple  admin  42 16 May 23:32 /usr/local/bin/vim -> /Applications/MacVim.app/Contents/bin/mvim
~$ 

chạy vim sẽ chạy macvim 'cos /usr/local/binnên có trước /usr/bintrong đường dẫn, mặc dù bạn có thể kiểm tra với which vim.

chạy vim (để chạy macvim), vẫn ổn nhưng bạn có thể muốn ánh xạ vi sang macvim nếu không chạy vi vẫn ở vim mặc định! Bạn có thể viết lại hoặc xóa (với rm) và tạo lại liên kết vi sym, với ln. Và để làm điều đó mà không có lỗi 'hoạt động không được phép ", bạn phải (tạm thời) vô hiệu hóa SIL. Https://apple.stackexchange.com/questions/208478/how-do-i-disable-system-integrity-protection- sip-aka-rootless-on-macos-os-x .

macvim +clipboardnhư thể hiện bởivim --version

Đây là một công việc ~/.vim/vimrcchỉ với các dòng yêu cầu.

:set mouse=a
:map <leader>c "+y
:map <leader>v "+p

Khóa lãnh đạo mặc định là dấu gạch chéo ngược.

Tôi đã đọc một đề nghị rằng người ta nên sử dụng khóa trưởng .. (chắc chắn điều khiển đã có nhiều khóa đã được sử dụng, vì vậy đề xuất là không sử dụng điều khiển. Tôi không biết nếu điều đó cũng áp dụng cho khóa lệnh, nhưng dù sao đi nữa).

Với ánh xạ được đề cập đó, \csẽ thực hiện việc "+ysao chép từ thanh ghi được gọi là + vào bảng tạm. Và\v sẽ dán từ thanh ghi được gọi là +.

Vì vậy, đó là một bản sao / dán hoạt động giữa các cửa sổ.

Một hệ điều hành khác có thể yêu cầu "*thay vì"+


Cả hai vims đều có -xterm_clipboard. Có thể một cách +xterm_clipboardcó ích theo một cách nào đó nhưng nó không quan trọng đối với giải pháp này.
barlop

0

Nếu bạn đang sử dụng, phiên Putty, thì nó sẽ tự động sao chép lựa chọn. Nếu chúng tôi đã sử dụng tùy chọn "set mouse = a" trong vim, chọn sử dụng Shift + Kéo chuột sẽ chọn văn bản tự động. Cần kiểm tra trong kỳ hạn X.


0

em ... Tiếp tục nhấn Shiftvà sau đó nhấp vào nút chuột phải


0

Tôi vô tình giải thích cách tắt set mouse=a, khi tôi đọc lại câu hỏi và phát hiện ra rằng OP không muốn tắt nó ngay từ đầu. Dù sao cho bất cứ ai đang tìm cách tắt chuột ( set mouse=) một cách tập trung, tôi để lại một tham chiếu đến câu trả lời của tôi ở đây: https://unix.stackexchange.com/a/506723/194822



0

Thêm set clipboard=unnamedvào của bạn .vimrc. Vì vậy, nó sẽ sử dụng thanh ghi clipboard '*' thay vì thanh ghi không tên cho tất cả các thao tác yank, xóa, thay đổi và đặt hoạt động (lưu ý rằng nó không chỉ ảnh hưởng đến chuột).

Hành vi của đăng ký '*' phụ thuộc vào nền tảng của bạn và cách bạn vimđã được biên dịch (hoặc nếu bạn sử dụngneovim ).

Nếu nó không hoạt động, bạn có thể thử set clipboard=unnamedplus, nhưng tùy chọn này chỉ có ý nghĩa trên các hệ thống X11.


-3

Trong chế độ ESC, khi đặt chuột = a, chọn văn bản bằng chuột. Điều này sẽ cho phép chế độ hình ảnh trong vim. Sau đó, bạn có thể nhấn 'y' để kéo văn bản đã chọn và 'p' để dán nó bất cứ nơi nào bạn muốn. Điều này chỉ xảy ra trong vim.


không, cái này sẽ không hoạt động khi bạn dán bên ngoài vim
barlop
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.