Toggle semicolon (or other character) at end of line

后端 未结 2 694
耶瑟儿~
耶瑟儿~ 2021-01-13 11:09

Appending (or removing) a semicolon to the end of the line is a common operation. Yet commands like A; modify the current cursor position, which is not always i

相关标签:
2条回答
  • 2021-01-13 12:09

    I don't think I've ever needed to remove a semicolon at the EOL but for adding a semicolon, I have

    nnoremap ,; m`A;<Esc>``
    

    Which sets a context mark, appends the semicolon and jumps back.

    0 讨论(0)
  • 2021-01-13 12:15

    Something like this would work

    nnoremap ;; :s/\v(.)$/\=submatch(1)==';' ? '' : submatch(1).';'<CR>
    

    This uses a substitute command and checks to see if the last character is a semicolon and if it is it removes it. If it isn't append it to the character that was matched. This uses a \= in the replacement part to execute a vim expression.

    If you wan't to match any arbitrary character you could wrap it in a function and pass in the character you wanted to match.

    function! ToggleEndChar(charToMatch)
        s/\v(.)$/\=submatch(1)==a:charToMatch ? '' : submatch(1).a:charToMatch
    endfunction
    

    and then the mapping would be to toggle the semicolon.

    nnoremap ;; :call ToggleEndChar(';')<CR>
    
    0 讨论(0)
提交回复
热议问题