Вот что я бы использовал:
vnoremap <silent> a<bar> :<c-u>silent! normal! vF<bar>of<bar><cr>
vnoremap <silent> i<bar> :<c-u>silent! normal! vT<bar>ot<bar><cr>
onoremap <silent> a<bar> :normal va<bar><cr>
onoremap <silent> i<bar> :normal vi<bar><cr>
В основном настраивается режим ожидания оператора (то есть onoremap), который вызывает соответствующее отображение визуального режима. Отображения в визуальном режиме будут искать в обратном направлении, чтобы найти |
с помощью F|
, затем переходить на другую сторону визуального выбора с помощью команды o
, а затем искать вперед с помощью f|
, чтобы выбрать другой конец области передачи. , Внутренние отображения такие же, но вместо команд F
и f
вы используете T
и t
.
К сожалению, эти сопоставления не работают правильно с командой .
redo, поскольку они по своей сути полагаются на сопоставления визуального режима, что означает, что команда .
выполнит ту же команду снова, но только для области, которая занимает такое же количество пространство.