Hoán đổi các giá trị và sự thật, và các dịch vụ khác thông qua ctrl + a, ctrl + x


10

Tôi nghĩ rằng sẽ rất hữu ích khi có khả năng trao đổi truefalsecá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:



12

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 truetrong đoạn mã sau:

flag = true

sau đó khi thực hiện :Switch, truesẽ biến thành false.


Không có gì! Tôi có ý tưởng điên rồ về một plugin 'vim-dwim' hoạt động khác nhau dựa trên cú pháp dưới con trỏ (ví dụ: khi nhấn Enter) và tôi nghĩ rằng tôi sẽ truyền cảm hứng rất nhiều cho mình từ plugin này. Nếu tôi bắt đầu làm nó, đó là.
VanLaser

7

Rất nhiều plugin

Toggling true/ falsevà tương tự đã được thực hiện bởi nhiều tác giả plugin. Hai trong số chúng đã được đề cập:

  • switch.vim bởi Andrew Radev ( # 4172 , github ) và
  • chuyển đổi-bool bởi Sagar Rakshe ( github ).

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 ).

Plugins siêu tăng áp 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/Xmà xác định một lệnh mới và / hoặc ánh xạ mới (bao gồm switch.vimtoggle-bool ). Tôi muốn làm nổi bật các plugin 'siêu nạp' Ctrl-A/Xra khỏi hộp và do đó, cung cấp theo mặc định những gì OP đã yêu cầu:

  • Hoán đổi bởi Michael Brown ( # 2294 , github ),
  • Công cụ kích hoạt tăng dần của Takuya Nishigori ( # 4817 , github ),
  • CtrlXA bởi Konfekt ( # 5600 , github ),
  • Chu kỳ của Zef Houssney ( github ),
  • Chu kỳ bằng bootleq ( github )

Một plugin có liên quan cũng mở rộng Ctrl-A/Xtăng tốc độ bởi Tim Pope ( # 2120 , github ) cho phép bạn tăng ngày.

Dự phòng

Một số plugin cho phép kết hợp Ctrl-A/Xplugin 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.


1

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


1
Chào mừng đến với trang web này! Lưu ý rằng sẽ rất thú vị khi thêm một điều kiện làm cho hàm giống như tích hợp <C-a><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ì ^Mtrong ánh xạ của mình và thường là cách tốt nhất để cung cấp chế độ cho maplệnh của bạn , ở đây nnoremapsẽ phù hợp hơn noremap.
statox
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.