Условный поиск и замена на строке в vim?

Скажем, я хочу прокомментировать и раскомментировать строку.

я знаю что могу

:s!^!//! 

а потом

 :s!^//!! 

Теперь, если я хочу, чтобы это было одним лайнером?

В принципе, если строка начинается с // то удалите ее, иначе добавьте ее.

Я хочу сопоставить эту команду с одним ярлыком вместо двух.

  • Как обновить дату в файле, если применимо, и прирастить последнюю цифру на единицу, если вы записываете в файл с помощью Vim?
  • Редактирование текстового файла с Vim не обновляет tail -f
  • проблема редактирования utf8 текстовый файл с vim
  • Можем ли мы исправить уже исправленный шрифт?
  • Ctrl + Right и Right отправляют одну и ту же последовательность в Putty> Экран> Vim
  • Скопировать / вставить в SSH'd VIM из локального (Windows) буфера обмена
  • Пунктуация заклинания Vim для ⸮
  • автоматическая замена vim
  • One Solution collect form web for “Условный поиск и замена на строке в vim?”

    Я совершенно уверен, что это невозможно сделать напрямую. Однако, я придумал функцию для вас. Поместите это в свой файл ~/.vimrc :

     function! Toggle() s!^\(\s*/\?[^/\s]/\?\)!xxx//\1!e s!^\(\s*\)//!\1!e s!^xxx//!//!e endfunc 

    (Это изменит любой xxx// вас уже есть в начале строки в // , но я бы предположил, что это редкое явление). Вы можете вызвать это, когда захотите :call Toggle() , но, вероятно, вам будет удобнее сопоставить его с ключом / комбо. Следующее отобразит его в Ctrl + / ; конечно, вы можете заменить любую комбинацию клавиш, которую вы предпочитаете (спросите, нужна ли вам помощь в сопоставлении с другой комбо). Поместите это тоже в ~.vimrc :

     nnoremap <C-/> :call Toggle()<CR> vnoremap <C-/> :call Toggle()<CR> inoremap <C-/> <Esc>:call Toggle()<CR>i 

    Эти карты Ctrl + / для функции в нормальном, визуальном и вставном режимах соответственно. Обратите внимание, что отображение вставки вернет вас в режим вставки, но переместите курсор в начало строки. Если вы предпочитаете оставаться в обычном режиме, просто inoremap i с конца строки inoremap .

    (Обновлено для работы с пробелом. Удаляет // после пробела, но всегда вставляет в начале строки)

    Linux и Unix - лучшая ОС в мире.