Làm thế nào để bạn sử dụng lại một lựa chọn chế độ trực quan?


164

Thông thường khi chỉnh sửa mã, tôi sẽ chọn một khối trong chế độ trực quan và thực hiện tìm kiếm và thay thế trên khối. Sau khi tôi thực hiện các thay đổi, tuy nhiên, nó rời khỏi chế độ trực quan. Làm thế nào để bạn thực hiện một tìm kiếm mới và thay thế trên cùng một lựa chọn?


Vâng, tôi đã tìm thấy một cách, nhưng nó hơi cồng kềnh :: '<,'> s / old / new / g Bất kỳ cách nào để làm điều này w / o phải gõ vào '<,'>?
mê cung

Câu trả lời:


244

Bạn có thể chọn lại khu vực hình ảnh được chọn cuối cùng với gv.


4
Tuyệt vời! @Heptite làm thế nào để tự tìm lệnh này w \ o Stackoverflow?
skywinder

6
@skywinder: giúp gv
Heptite

4
@Heptite: Tôi không chắc bạn có đang tặc lưỡi ở đây không, nhưng lệnh đó cho bạn thấy những gì: gv làm một khi bạn biết về nó. Nhưng nếu tôi không làm thì sao? Dạy một người đàn ông (wo) câu cá và tất cả những thứ đó.
Ben Thul

@BenThul: Tôi nghĩ rằng tôi đã hiểu nhầm câu hỏi. Tôi biết về nhiều tính năng của Vim chỉ bằng cách đọc qua phần lớn tài liệu theo thời gian, bắt đầu bằng " :help".
Heptite

2
:help select-visualsẽ dẫn bạn đến hướng dẫn chính xác bên trong vim @skywinder.

14

gv chắc chắn là phương pháp nhanh nhất (sử dụng lựa chọn cuối cùng), nhưng nếu bạn muốn một vùng lựa chọn được lưu ổn định (hoặc một số), bạn luôn có thể tạo macro.

Hãy nói rằng tôi muốn lưu trữ một lựa chọn phương thức hiện tại của tôi, đi từ dòng 25-35. Tôi có thể tạo một macro chọn toàn bộ phương thức bằng cách gõ

q    //start recording
a    //use register a
25G  //Go to line 25
V    //visual-line mode
35G  //Go to line 35
q    // stop recording

Sau đó tôi có thể lấy lại lựa chọn đó bằng cách gõ @a(chạy macro trong đăng ký a). Lặp lại với bất kỳ thanh ghi, dòng hoặc phần nào của dòng mà bạn muốn. Rõ ràng nếu bạn thay đổi tệp, lựa chọn cũng có thể thay đổi, vì vậy bạn có thể muốn xem xét sử dụng dấu thay vì số dòng "mã hóa cứng".


zmto enter mà bạn cần biết số dòng. Tôi nghĩ tốt hơn là xác định hai dấu và sau đó sử dụng: 'a,' b để hoạt động trên phạm vi giữa chúng (hoặc thay thế 'bằng backticks nếu muốn độ chi tiết trong một dòng)
sillyMunky

Vâng, điều số dòng là ngu ngốc - Tôi chỉ sử dụng nó như một ví dụ cho cách tạo một macro lựa chọn. Sử dụng một loạt các nhãn hiệu là một ý tưởng thú vị mặc dù ...
AlexMA

6

gvhoạt động tuyệt vời để phục hồi lựa chọn cuối cùng. Nhưng người ta đôi khi cần thêm một chút.

Nếu bạn cần bản ghi liên tục hơn, hãy xem plugin này chúng tôi hiện đang làm việc trên GitHub.

VisualMarks cho phép bạn lưu và khôi phục các khu vực được chọn trực quan giống như bạn lưu và đánh dấu các vị trí cụ thể trong tệp của mình với m. Sau khi cài đặt và với các tùy chọn mặc định, sử dụng:

ma

trong chế độ trực quan để lưu lựa chọn hiện tại của bạn để đánh dấu a, sau đó

<a

trong chế độ bình thường để quay lại lựa chọn này.


Wow, âm thanh đó thực sự mát mẻ. Tôi sẽ phải thử plugin đó! Nhân tiện, những VisualMarks này có thể tồn tại với mkview như bạn có thể đánh dấu không?
mê cung

@labyrinth Tôi không biết mkviewnhưng .. Tôi đoán là vì các dấu được lưu trong một tệp riêng biệt và .. Tôi khuyên bạn nên thử đi :) Nếu họ không kiên trì như bạn muốn, chúng tôi sẽ rất vui khi nhận được tính năng của bạn yêu cầu trên GitHub và thử xử lý nó.
iago-lito

1

Giả sử tôi muốn thay thế Tạm biệt bằng Hello và mã bên dưới đã được chọn:

public static void main(String[] args){
    System.out.println("Goodbye World");
}

Tôi sẽ gõ :s/Goodbye/Hello/và vim sẽ thay thế tất cả các trường hợp GoodbyevớiHello

Nó chỉ đơn giản là sự kết hợp của các biểu thức thông thường của vim và các lựa chọn chế độ hình ảnh. Khi bạn chọn, nó sẽ tự động điền'<,'>


1
Xin lỗi, đó không phải là điều tôi đang hỏi. Điều tôi đang hỏi là làm thế nào để bạn sử dụng lại lựa chọn để thực hiện một tìm kiếm khác và thay thế trên cùng phạm vi như đã chọn trước đó?
mê cung

1
Sau khi thay thế, bạn sẽ thoát khỏi chế độ trực quan. gõ vào gvvà chế độ hình ảnh của bạn sẽ trở lại trạng thái lựa chọn trước đó.
Scott Nguyễ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.