Có cách nào để chọn lại hình dạng trực quan cuối cùng, thay vì lựa chọn thực tế cuối cùng, bắt đầu từ vị trí con trỏ hiện tại không?


8

Tôi biết rằng gv chọn lại lựa chọn hình ảnh cuối cùng. Điều này thật tuyệt và tôi sử dụng nó thường xuyên.

Nhưng đôi khi tôi muốn làm một cái gì đó liên quan nhưng khác: từ vị trí con trỏ hiện tại, chọn một khối có cùng hình dạng với lựa chọn hình ảnh trước đó, nhưng định vị vị trí con trỏ hiện tại.

Đặc biệt, tôi thường có mong muốn này khi dán một đoạn văn bản và sau đó muốn thực hiện một số loại thay thế hoặc chuyển đổi cho nó. Vì vậy, lệnh này sẽ cho phép tôi chọn lại những gì tôi vừa dán. (Vì lý do đó, cũng hữu ích sẽ là một lệnh để "chọn trực quan lần dán cuối cùng", nhưng dù sao cũng có những trường hợp khác mà theo nghĩa đen tôi muốn là "chọn lại hình dạng trực quan cuối cùng bất kể liệu có chọn lại lần dán cuối cùng hay không." EDIT: Vui lòng xem có cách nào để chọn lại các văn bản dán trước, chứ không phải là sự lựa chọn thực tế cuối cùng, bắt đầu từ vị trí con trỏ hiện tại? cho câu hỏi này )

(Lưu ý: nếu không có cách tích hợp sẵn để thực hiện việc này, tôi thoải mái chỉnh sửa ~ / .vim để thêm ví dụ vimscript [và có thể sửa đổi nó] và liên kết nó với tổ hợp phím dễ dàng, nhưng viết từ đầu để làm điều này là vượt quá khả năng hiện tại của tôi.)


1
Bạn có thể thực hiện macro ..
VanLaser 7/12/2015

1
Đây là một ý tưởng hay (tôi giả sử bạn có ý gì đó như qpv [select ...] q [move ...] @ p ") nhưng nó không thực sự đạt được những gì tôi muốn, vì trong quá trình sử dụng bình thường tôi muốn để hoạt động ở chế độ trực quan, sau đó chỉ "nhận ra" rằng tôi muốn lựa chọn lại sau thao tác dán. Tôi đang tìm kiếm một vài tổ hợp phím để trợ giúp trong trường hợp đó, mặc dù tôi đồng ý rằng điều này hữu ích nếu tôi hoạt động đủ chậm để dự đoán cần phải chọn lại khu vực.
Philip

Trên thực tế có một trường hợp khác không thể thực hiện được: dán từ bên ngoài vim (ví dụ: thông qua thanh ghi *). Trong trường hợp này, câu hỏi nên như trong ngoặc đơn: có một chuyển động để chọn trực quan dán cuối cùng không? Điều này rất hữu ích, ví dụ như để gửi mã ví dụ từ Stackexchange từ vim đến REPL.
Philip

Trên thực tế, tôi không chắc chắn những gì bạn muốn - để nhớ "tọa độ" của lần dán cuối cùng, trước khi thay đổi thêm, để chọn lại chúng một cách dễ dàng?
VanLaser

Câu trả lời:


6

Đây là một bản tóm tắt đơn giản cho phép bạn chọn lại văn bản đã dán (hoặc thay đổi) vừa qua:

noremap gV `[v`]

Từ các bình luận trong bài viết gốc, có lẽ bạn muốn lưu tọa độ của thay đổi / dán cuối cùng trước các thay đổi khác / tiếp theo và khôi phục lựa chọn trực quan đó ?


1
OK có, đã thử nghiệm cái này và nó hoạt động; điều đó thật tuyệt. Thực sự đây là lỗi của tôi khi hỏi hai câu hỏi liên quan trong một. Tôi nghĩ những gì tôi sẽ làm là thay đổi câu hỏi này thành câu hỏi bạn đã trả lời đúng ở đây và sau đó hỏi lại câu hỏi liên quan dưới dạng một câu hỏi riêng biệt, trừ khi một mod có ý tưởng tốt hơn.
Philip

Trên thực tế, câu hỏi đó được hỏi và trả lời tại đây: vi.stackexchange.com/questions/31/ lỗi Xin lỗi - lỗi của tôi vì đã làm cho một mớ hỗn độn.
Philip

4

Để chọn lại hình dạng cũ, bạn có thể làm điều này:

1v

1
Nó không chọn lại hình dạng giống nhau, nhưng cùng số lượng ký tự.
muru

Đã thử nghiệm điều này và nó dường như cũng hoạt động với các ghi chú @muru. Trong hầu hết các trường hợp khi chọn lại không phải để chọn văn bản đã dán mà tạo lại một lựa chọn sau đó định vị chính xác con trỏ sẽ ngụ ý rằng việc chọn cùng một số ký tự sẽ tạo lại hình dạng giống nhau. NHƯNG, tôi có thể tưởng tượng ngoại lệ. Vì vậy, vẫn tò mò về một phương pháp thay thế nhân đôi hình dạng. Có lẽ điều này là không thể trong trường hợp các dòng không có cùng độ dài.
Philip
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.