Dừng lựa chọn dán vim như văn bản!


10

Tôi đã sử dụng VI và VIM trong nhiều năm (30 trở lên) (trong xterms, không phải cửa sổ riêng của nó, gvim) và tôi có một thư viện lớn các lệnh vim mà tôi đưa vim bằng nút giữa chuột làm lựa chọn.

Ví dụ, tôi thường làm những việc như ...

 vi {many_hundreds_of_files}
   paste vim commands using mouse - one paste per file.

Việc lựa chọn sẽ bao gồm rất nhiều lệnh VIM để thực hiện những việc như thay thế kiểm tra, định dạng, di chuyển các dòng xung quanh, v.v., v.v., và thường kết thúc bằng: w và: các lệnh VIM tiếp theo, ở cuối lựa chọn, vì vậy vim đã sẵn sàng để tôi dán lại vào tập tin tiếp theo. Điều này cho phép tôi cập nhật số lượng lớn tệp theo các cách RẤT phức tạp mà không cần các tập lệnh đặc biệt (chẳng hạn như chỉnh sửa tại chỗ perl) để thực hiện.

Một số trong số các lệnh dán vim này dài hơn 200 dòng (được lưu trữ trong các tệp văn bản tôi bật lên trên màn hình và 'copy-all'! Chúng tạo ra rất nhiều thay đổi cho tập hợp hàng ngàn tệp tôi đang định dạng lại. Nhưng chỉ dành cho tập hợp các tệp cụ thể, không dành cho công việc vim hàng ngày của tôi. EG: Định dạng lại hàng loạt cho các tệp văn bản / dữ liệu.

Vấn đề...

Trong bản vá hệ thống cuối cùng của tôi (Fedora 25), vim hiện đã dán lựa chọn chuột NHƯ VĂN và không phải là lệnh vim, và tôi dường như không thể dừng nó!

Nó vẫn hoạt động tốt trên một hệ thống khác (Fedora 24).

Nếu tôi muốn dán dưới dạng văn bản, tôi vào chế độ chèn trước khi dán! Tôi không muốn VIM tự động dán các lựa chọn NHƯ văn bản khi nó không ở chế độ chèn. Tôi hiểu điều này có nghĩa là một tính năng bảo mật, nhưng với tôi đó là một vấn đề về khả năng sử dụng CHÍNH.

Tôi đã thử quay lại các mục nhập terminfo (xterm-256color) từ một máy không thực hiện việc này (đặc biệt là mục terminfo "kmous"). Tôi cũng đã xem cài đặt vim ": set mouse =" (không có giá trị!). Tôi không biết đó là xterm (nghi ngờ) hay thứ gì đó đã thay đổi trong VIM (có thể), và thay đổi nhật ký và google đã không có ích.

Tuy nhiên, không có gì có vẻ giúp tôi có được hành vi cũ.


Đã tìm thấy một người dùng khác có cùng vấn đề, ít chi tiết hơn, không có giải pháp unix.stackexchange.com/questions/346293/ Kẻ
anthony

1
Tôi nghi ngờ đó có nhiều khả năng là một vimsự thay đổi: Làm thế nào vimbên trong có thể xtermbiết một cái gì đó được nhập thông qua bàn phím hoặc dán qua nút chuột? Tôi không biết một cơ chế như vậy. Mặt khác, xtermbiết rằng nó đang thực thi vimđể nó có thể quyết định bao quanh việc dán ivà <esc>. Hãy thử (a) với một loại cửa sổ đầu cuối khác và (b) một bản sao vimvới một tên khác. Điều này sẽ giúp thu hẹp nguyên nhân của vấn đề.
Philippos

Tôi đồng ý với @philippos. Có thể một cái gì đó khác hơn vimlà chiếm quyền điều khiển phương pháp dán của bạn. Có thể thử ssh'ing hoặc telneting vào máy của bạn và dán theo cách đó. Nếu bạn có hộp Windows, hãy sử dụng putty để ssh vào máy Fedora25 của bạn và dán theo cách đó.
Jim U

Không liên quan trực tiếp, nhưng gvim trên windows đã hành xử theo cách này trong nhiều năm. Khi bạn cài đặt gvim, bạn nhận được hai tệp thực thi, gvim.exe(đồ họa-vim) và dòng lệnh vim.exe. Dán "iText" trong gvim.exe và bạn nhận được itext. Dán nó vào vim.exe và bạn nhận đượctext
Jim U

1
@Philippos Cơ chế đó có thể được dán ngoặc . Tôi không biết làm thế nào Vim có thể hỗ trợ nó, có lẽ là pastetoggletùy chọn?
Gilles 'SO- ngừng trở nên xấu xa'

Câu trả lời:


12

Sau khi xem qua RẤT NHIỀU trang web, nhiều người đưa ra một số gợi ý dường như không hoạt động, tôi tìm thấy một gợi ý (văn bản bổ sung xung quanh một dán) dẫn tôi đến nguyên nhân và giải pháp cho vấn đề.

Có vẻ như vim đã tích hợp vào nó một số mục nhập thuật ngữ 'giả' mà nó sử dụng khi nhận ra các thiết bị đầu cuối cụ thể (và đôi khi bị sai, mặc dù trong trường hợp này không sai).

Cài đặt termcap trong vim được thêm số vì như vậy KHÔNG hiển thị trong danh sách cài đặt ": set all" bình thường. Để xem chúng, bạn cần sử dụng ": set termcap". Cài đặt thuật ngữ 'không chuẩn' cụ thể là "t_BE" (xem vim ": help t_BE"). Trợ giúp tích hợp "xterm-ngoặced-paste" giải thích cài đặt thuật ngữ nội bộ-vim này.

Về cơ bản nếu cài đặt này được xác định (trong trường hợp này bởi Vim không phải termcap / terminfo) thì vim sẽ gửi nó đến xterm khi nó khởi động, nó báo cho xterm thêm mã đặc biệt xung quanh bất kỳ văn bản nào mà người dùng dán từ nguồn bên ngoài. Khi vim thấy những thứ này, nó sẽ tự động chuyển sang chế độ chèn mà còn đặt 'chế độ dán' để không định dạng văn bản.

Cái sau này (chế độ dán) là tôi nghĩ RẤT hữu ích! Trước đây là những gì đã mang lại cho tôi tất cả những rắc rối.

Giải pháp vũ lực là vô hiệu hóa ngoặc-dán bằng cách thêm nó vào ".vimrc"

:set t_BE=

Một giải pháp thay thế ....

Thay vì vô hiệu hóa hoàn toàn dán ngoặc, hãy dừng vim thực hiện hành động khi thấy chuỗi bắt đầu của một thiết bị đầu cuối dán (từ chuột), trong khi ở chế độ chỉ huy hoặc chế độ bình thường.

:nmap <PasteStart>  <NOP>
:nmap <PasteEnd>    <NOP>
:cmap <PasteStart>  <NOP>
:cmap <PasteEnd>    <NOP>

Sử dụng điều này có nghĩa là nếu bạn dán văn bản trong khi ở chế độ chèn, vim sẽ không cố định dạng văn bản (thụt lề) mà nhiều khả năng đã được thụt lề.

Điều này không có nghĩa là tôi không còn cần phải chuyển chế độ dán, vì tôi cũng sử dụng chuyển đổi chế độ dán (được ánh xạ tới F2) để vô hiệu hóa "showbreak" và "listchars" (hiển thị các dòng được bọc, tab, khoảng trắng không ngắt và không gian thêm ở cuối dòng). Tôi vẫn sẽ cần đặt vim ở chế độ đó khi tôi muốn thực hiện các lựa chọn chuột để dán ở nơi khác.

Nhận xét và đề xuất về các giải pháp đều được chào đón.


Điều này cũng có vẻ hoạt động trong Cygwin Vm nhưng thật đáng buồn khi không giải quyết được vấn đề trong VS Vim
James Robinson

@JamesRobinson Nhiều khả năng đó là một thiết bị đầu cuối dựng sẵn khác cho VS
anthony
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.