Tôi nghĩ rằng sẽ rất hữu ích khi có khả năng trao đổi true
và false
các giá trị trong mã một cách nhanh chóng, với sự kết hợp ctrl+ ahoặc ctrl+ x. Có một số plugin cho điều đó hoặc cái gì khác?
Tôi nghĩ rằng sẽ rất hữu ích khi có khả năng trao đổi true
và false
các giá trị trong mã một cách nhanh chóng, với sự kết hợp ctrl+ ahoặc ctrl+ x. Có một số plugin cho điều đó hoặc cái gì khác?
Câu trả lời:
Tôi đã viết một plugin ( toggle-bool ) để chuyển các giá trị boolean mà bạn có thể thử. Nó hỗ trợ các giá trị boolean sau:
true
<-> false
yes
<-> no
on
<-> off
0
<-> 1
Có switch.vim , và nó có thể tùy chỉnh.
Điểm vào chính của plugin là một lệnh duy nhất ,
:Switch
. Khi lệnh được thực thi, plugin sẽ tìm một trong một vài mẫu cụ thể dưới con trỏ và thực hiện một trạm phụ tùy thuộc vào mẫu.
Ví dụ: nếu con trỏ nằm true
trong đoạn mã sau:
flag = true
sau đó khi thực hiện :Switch
, true
sẽ biến thành false
.
Toggling true
/ false
và tương tự đã được thực hiện bởi nhiều tác giả plugin. Hai trong số chúng đã được đề cập:
Những người khác là chuyển đổi bởi Timo Teifel ( # 895 ), thứ hai bởi Stefan Karlsson ( # 1046 ), toggle_words bởi Vincent Wang ( # 1676 ), toggle_word bởi Alexandru Ungur ( # 1748 ), incbool.vim bởi Dmitry Petrov ( # 4361 , github ) , nextval của Michael Arlt ( # 4536 , github ).
Chỉ trong trường hợp bạn muốn tăng số theo một chuỗi tùy chỉnh, ví dụ như chuỗi Fibonacci, hãy kiểm tra nexus của Barry Arthur ( github ).
Ctrl-A/X
Tuy nhiên, không phải tất cả chúng đều theo mặc định ý tưởng để mở rộng Ctrl-A/X
mà xác định một lệnh mới và / hoặc ánh xạ mới (bao gồm switch.vim và toggle-bool ). Tôi muốn làm nổi bật các plugin 'siêu nạp' Ctrl-A/X
ra khỏi hộp và do đó, cung cấp theo mặc định những gì OP đã yêu cầu:
Một plugin có liên quan cũng mở rộng Ctrl-A/X
là tăng tốc độ bởi Tim Pope ( # 2120 , github ) cho phép bạn tăng ngày.
Một số plugin cho phép kết hợp Ctrl-A/X
plugin tăng thứ hai làm dự phòng, ví dụ:
Hoán đổi bởi Michael Brown:
nmap <Plug>SwapItFallbackIncrement <Plug>SpeedDatingUp
nmap <Plug>SwapItFallbackDecrement <Plug>SpeedDatingDown
vmap <Plug>SwapItFallbackIncrement <Plug>SpeedDatingUp
vmap <Plug>SwapItFallbackDecrement <Plug>SpeedDatingDown
chu kỳ bằng bootleq:
map <silent> <Plug>CycleFallbackNext <Plug>SpeedDatingUp
map <silent> <Plug>CycleFallbackPrev <Plug>SpeedDatingDown
switch.vim bởi Andrew Radev:
nnoremap <c-a> :if !switch#Switch()<bar>call speeddating#increment()<bar>endif<cr>
nnoremap <c-x> :if !switch#Switch({'reverse': 1})<bar>call speeddating#decrement()<bar>endif<cr>
Lưu ý
Nếu bạn sử dụng hành vi tìm kiếm của nội dung Ctrl-A/X
(tìm giá trị có thể tiếp theo theo dòng để tăng), việc tăng áp chúng có thể gây trở ngại.
thay đổi ánh xạ thành những gì bạn muốn sử dụng
hoàn tác là trong trường hợp bạn sử dụng nó trên một khoảng trắng, vì ciw sẽ chỉnh sửa khoảng trắng thay vì từ (và không có cách nào dễ dàng để đi đến từ đúng một cách đáng tin cậy)
function SwapBool ()
let s:w = expand("<cword>")
if s:w == "false"
normal ciwtrue
if expand("<cword>") != "true"
normal u
endif
elseif s:w == "true"
normal ciwfalse
if expand("<cword>") != "false"
normal u
endif
endif
endfunction
noremap <C-F> :call SwapBool()^M
cũng lưu ý ^ M cần phải <C-V><Enter>
, không phải theo nghĩa đen ^ M
<C-a>
và <C-x>
khi từ hiện tại không phải là boolean, theo cách này OP thực sự có thể sử dụng các ánh xạ này. Ngoài ra, bạn có thể sử dụng <CR>
thay vì ^M
trong ánh xạ của mình và thường là cách tốt nhất để cung cấp chế độ cho map
lệnh của bạn , ở đây nnoremap
sẽ phù hợp hơn noremap
.