Làm cách nào để thay đổi cho đến khi gạch dưới tiếp theo trong VIm?


60

Nếu tôi có văn bản này trong vim và con trỏ của tôi ở ký tự đầu tiên:

www.foo.com

Tôi biết rằng tôi có thể làm:

  • cwđể thay đổi đến giai đoạn đầu tiên, bởi vì word(chữ thường w) kết thúc tại bất kỳ dấu chấm nào HOẶC khoảng trắng
  • cWđể thay đổi toàn bộ địa chỉ, vì một Word(chữ hoa w) chỉ kết thúc ở khoảng trắng

Bây giờ, nếu tôi có cái này:

stupid_method_name

và muốn thay đổi nó để điều này?

awesome_method_name

Cả hai cwcWthay đổi toàn bộ, nhưng tôi chỉ muốn thay đổi đoạn trước khi gạch dưới.

Kỹ thuật dự phòng của tôi là c/_, có nghĩa là "thay đổi cho đến khi bạn nhấn vào dấu gạch dưới tiếp theo trong tìm kiếm", nhưng đối với tôi, điều đó cũng khiến tất cả các dấu gạch dưới được tô sáng như cụm từ tìm kiếm, hơi khó chịu.

Có một công cụ xác định như whoặc Wkhông bao gồm dấu gạch dưới?


Có chuyện gì với bạn :nohlvậy?
Ignacio Vazquez-Abrams

Tôi làm muốn điều kiện tìm kiếm để được đánh dấu hầu hết thời gian; chỉ khi tôi sử dụng tìm kiếm như một phong trào. (Tôi cũng vừa hỏi câu hỏi này: superuser.com/questions/244042/NH )
Nathan Long

Câu trả lời:


82

Bạn có thể làm cf_. Sẽ không làm nổi bật nhân vật được tìm kiếm.

Bạn cũng có thể làm ct_nếu bạn không muốn bao gồm _.


15
Bạn đang bối rối f, t, F và T. ftiến về phía nhân vật; Fdi chuyển ngược về phía nhân vật; ttiến về phía trước ngay trước nhân vật; và Tdi chuyển ngược về phía nhân vật bên phải nhân vật mục tiêu. Vì vậy, ví dụ thứ hai của bạn nên có ct_.
garyjohn

2
Bây giờ câu trả lời của tôi đã được sửa chữa. Xin lỗi và cảm ơn bạn.
doubleface

4
ct_chính xác là những gì tôi muốn. Điều này giờ đã trở thành một phần trong quy trình làm việc thường xuyên của tôi. Cảm ơn!
Nathan Long

1
Điều này cũng vô cùng mở rộng và do đó mạnh mẽ. Tôi đoán bạn có thể đặt bất kỳ ký tự nào sau f hoặc t và nó sẽ chuyển sang lần xuất hiện tiếp theo (hoặc trước cho mũ). Cảm ơn.
Dom

2
Vim không bao giờ thất bại, chỉ có một sự hiểu biết về khả năng của nó!
Benjamin R

64

Đặt cái này trong .vimrc của bạn:

set iskeyword-=_

Sau đó, _ sẽ được coi là một ranh giới từ (mặc dù không phải là ranh giới WORD) và cw có thể được sử dụng để chỉ thay đổi "tuyệt vời" và cW để thay đổi toàn bộ.

Xem:

:help iskeyword

:help word

để biết thêm.


6
Thật tuyệt khi biết rằng tôi có thể xác định ranh giới từ của riêng mình, nhưng sau một số suy nghĩ, tôi nghĩ giải pháp tốt nhất là ct_như doubleface nói dưới đây, vì nó ngắn gọn và là hành vi vim mặc định.
Nathan Long

Đây là sở thích cá nhân của tôi
Jay

2
Tôi thích cái này, nhưng nó phá vỡ mã màu cú pháp của tôi trong php.
Aaron Surrain

Làm thế nào tôi có thể bỏ đặt hoặc chuyển đổi này?
Behe

1

camelcasemotion là một plugin vim khá tiện dụng cho phép bạn di chuyển qua các từ khi sử dụng ký hiệu gạch dưới hoặc ký tự camelcase. Sử dụng plugin này, bạn có thể đặt dấu phẩy trước nhiều lệnh chuyển động vim truyền thống sẽ cho phép bạn coi các từ trong ký hiệu gạch dưới hoặc ký tự dưới dạng từ đầy đủ.

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.