Tukar nilai "true" dan "false" melalui ctrl + a, ctrl + x

10

Saya pikir akan berguna untuk memiliki kemungkinan untuk menukar truedan falsenilai - nilai dalam kode dengan cepat, dengan kombinasi ctrl+ aatau ctrl+ x. Apakah ada plugin untuk itu atau yang lainnya?

Alexander Myshov
sumber

Jawaban:

6

Saya menulis sebuah plugin ( toggle-bool ) untuk mengganti nilai-nilai boolean yang dapat Anda coba. Ini mendukung nilai boolean berikut:

  • true <-> false
  • yes <-> no
  • on <-> off
  • 0 <-> 1
Sagar Rakshe
sumber
Oh, itu yang saya cari. Tapi saya punya masalah kecil. Bisakah kamu memperbaikinya? github.com/sagarrakshe/toggle-bool/issues/1
Alexander Myshov
1
@lucidbrot dikoreksi
Sagar Rakshe
12

Ada switch.vim , dan dapat disesuaikan.

Titik masuk utama plugin adalah satu perintah :Switch,. Ketika perintah dieksekusi, plugin mencari salah satu dari beberapa pola tertentu di bawah kursor dan melakukan substitusi tergantung pada polanya.

Misalnya jika kursor berada di truedalam kode berikut:

flag = true

kemudian setelah dieksekusi :Switch, trueakan berubah menjadi false.

VanLaser
sumber
Sama-sama! Saya memiliki gagasan gila tentang plugin 'vim-dwim' yang bertindak secara berbeda berdasarkan sintaksis di bawah kursor (misalnya ketika menekan Enter), dan saya pikir saya akan sangat menginspirasi diri saya dari plugin ini. Jika saya bisa mulai membuatnya, itu.
VanLaser
7

Banyaknya Plugin

Beralih true/ falsedan yang serupa telah diterapkan oleh banyak pembuat plugin. Dua dari mereka telah disebutkan:

  • switch.vim oleh Andrew Radev ( # 4172 , github ) dan
  • toggle-bool oleh Sagar Rakshe ( github ).

Lainnya beralih oleh Timo Teifel ( # 895 ), Senin oleh Stefan Karlsson ( # 1046 ), toggle_words oleh Vincent Wang ( # 1676 ), toggle_word oleh Alexandru Ungur ( # 1748 ), incbool.vim oleh Dmitry Petrov ( # 4361 , github ) , nextval oleh Michael Arlt ( # 4536 , github ).

Untuk berjaga-jaga jika Anda ingin menambah angka sesuai dengan seri kustom, misalnya seri Fibonacci, periksa nexus oleh Barry Arthur ( github ).

Pengaya Plugin Ctrl-A/X

Namun, tidak semua dari mereka secara default mengikuti ide untuk memperpanjang Ctrl-A/Xtetapi mendefinisikan perintah baru dan / atau pemetaan baru (termasuk switch.vim dan toggle-bool ). Saya ingin menyoroti plugin yang 'supercharge' di Ctrl-A/Xluar kotak dan, oleh karena itu, memberikan secara default apa yang ditanyakan OP:

Plugin terkait yang juga diperluas Ctrl-A/Xadalah speeddating oleh Tim Pope ( # 2120 , github ) yang memungkinkan Anda untuk menambah tanggal.

Fallback

Beberapa plugin memungkinkan untuk menggabungkan Ctrl-A/Xplugin incrementor kedua sebagai fallback, misalnya

  • SwapIt oleh Michael Brown:

    nmap <Plug>SwapItFallbackIncrement <Plug>SpeedDatingUp
    nmap <Plug>SwapItFallbackDecrement <Plug>SpeedDatingDown
    vmap <Plug>SwapItFallbackIncrement <Plug>SpeedDatingUp
    vmap <Plug>SwapItFallbackDecrement <Plug>SpeedDatingDown
    
  • siklus dengan bootleq:

    map <silent> <Plug>CycleFallbackNext <Plug>SpeedDatingUp
    map <silent> <Plug>CycleFallbackPrev <Plug>SpeedDatingDown
    
  • switch.vim oleh 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>
    

Catatan
Jika Anda menggunakan perilaku seek dari builtin Ctrl-A/X(temukan nilai berikutnya yang mungkin sejalan dengan peningkatan), pengisian daya supercharger dapat mengganggu.

Hotschke
sumber
1

ubah pemetaan menjadi apa yang ingin Anda gunakan

urungkan jika Anda menggunakannya di atas spasi, karena ciw akan mengedit spasi alih-alih kata (dan tidak ada cara mudah untuk mendapatkan kata yang tepat secara andal)

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

juga perhatikan ^ M harus <C-V><Enter>, bukan harfiah ^ M

Efi
sumber
1
Selamat datang di situs ini! Perhatikan bahwa akan menarik untuk menambahkan kondisi yang akan membuat fungsi seperti bawaan <C-a>dan <C-x>ketika kata saat ini bukan boolean, dengan cara ini OP benar-benar dapat menggunakan pemetaan ini. Anda juga dapat menggunakan <CR>alih-alih ^Mdalam pemetaan Anda, dan biasanya merupakan praktik terbaik untuk memberikan mode ke mapperintah Anda , di sini nnoremapakan lebih tepat daripada noremap.
statox