Làm thế nào để thực hiện các động tác tôn trọng camelCase hoặc Snake_case?


20

Người ta thường sử dụng camelCase hoặc Snake_case để phân tách nhiều từ tạo thành từ định danh. Nó sẽ được tốt đẹp nếu "từ" phong trào ( b, w, e) sẽ phát hiện những ranh giới nội tâm-identifier.

Làm thế nào có thể đạt được hành vi này? (Plugin / vimrc / ...?)


1
Tôi cũng muốn biết điều này chosnake_case
Martin Tournoij

Bạn có thể làm gì đó với iskeywordcài đặt, nhưng tôi sợ điều này sẽ có nhiều tác dụng phụ bổ sung ... (xem :help word).
Martin Tournoij

@Carpetsmoker Tôi nghĩ rằng nó làm việc cho snake_case. Có vẻ như nó không, bao gồm nó trong quesiton.
Jasper

4
VimWiki đã bảo vệ bạn: vim.wikia.com/wiki/Moving_ENC_camel_case_words Tôi sẽ viết một câu trả lời thích hợp vào một lúc nào đó nếu người khác không đánh bại tôi.
Giàu

Cá nhân tôi xem một từ camalCase là toàn bộ từ và không thích ý tưởng chia một nửa thành một từ vì trường hợp hoặc gạch dưới. Thông thường tôi sử dụng các phím ftđể quản lý các chuyển động từ bên trong.
Sukima

Câu trả lời:


11

Plugin CamelCaseMotion làm những gì bạn muốn. Theo mặc định nó xạ tới các phím ,w, ,b, ,eđó là tương đương với bình thường w, b, e. Nó hoạt động cho cả CamelCase và Snake_case:

Thí dụ:

camelCaseWord

Sử dụng d,wsẽ loại bỏ camel; sử dụng nó một lần nữa sẽ loại bỏ Case.

Hoặc với trường hợp rắn:

snake_case_word

d,wsẽ loại bỏ snake_, và vào lần thứ hai nó sẽ loại bỏ case_.

Chuyển động "bên trong" (như diw) cũng sẽ hoạt động như mong đợi (như di,w).

Nếu bạn thích, bạn cũng có thể ghi đè mặc định w, bevới:

map <silent> w <Plug>CamelCaseMotion_w
map <silent> b <Plug>CamelCaseMotion_b
map <silent> e <Plug>CamelCaseMotion_e
sunmap w
sunmap b
sunmap e
omap <silent> iw <Plug>CamelCaseMotion_iw
xmap <silent> iw <Plug>CamelCaseMotion_iw
omap <silent> ib <Plug>CamelCaseMotion_ib
xmap <silent> ib <Plug>CamelCaseMotion_ib
omap <silent> ie <Plug>CamelCaseMotion_ie
xmap <silent> ie <Plug>CamelCaseMotion_ie

2
Lưu ý rằng ánh xạ mặc định của plugin này che mờ ,lệnh (lặp lại lần cuối f/ t/ F/ Tchuyển động), nghĩa là nếu bạn muốn sử dụng lệnh đó, bạn sẽ phải chờ một độ trễ (được định cấu hình bởi 'timeoutlen'). May mắn thay, plugin cho phép bạn sử dụng các ánh xạ thay thế mà bạn chọn.
tommcdo

Dường như có một số tác dụng phụ với plugin này, tức là: dwbật , key);khi con trỏ kdường như xóa toàn bộ dòng (bao gồm cả dòng mới), trong khi tôi dự kiến ​​sẽ keybị xóa ...
Martin Tournoij

1
Tôi tìm thấy plugin này là tốt hơn. Kết hợp chuyển động với xóa hoạt động đúng, và nó cũng dừng lại ở dấu ngoặc.
Paschalis

Điểm nhỏ, nhưng trong ví dụ đầu tiên, nó chắc chắn sẽ loại bỏ camelvà sau đó Case, không Word?
prefer_anon
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.