Emacs имеет полезную команду transpose-words
, которая позволяет обменивать слово перед курсором со словом после курсора, сохраняя пунктуацию.
Например, 'stack |overflow
+ M-t =' overflow stack|
('|
- позиция курсора).
<a>|<p>
становится <p><a|>
.
Можно ли эмулировать его в Vim? Я знаю, что могу использовать dwwP
, но он не работает хорошо с пунктуацией.
Обновление: Нет, dwwP
действительно не является решением. Представьте себе:
SOME_BOOST_PP_BLACK_MAGIC( (a)(b)(c) )
// with cursor here ^
Emacs M-t обменял бы b
и c
, в результате получив (a)(c)(b)
.
Что работает /\w
yiwNviwpnviwgp
. Но это портит ""
и "/
. Есть ли более чистое решение?
Update²:
решаемые
:nmap gn :s,\v(\w+)(\W*%#\W*)(\w+),\3\2\1\r,<CR>kgJ:nohl<CR>
Несовершенно, но работает.
Спасибо Camflan за то, что вы принесли мне элемент %#
. Конечно, все это на wiki, но я не понимал, что он может решить проблему точного (Emacs получил полное право) дублирование transpose-words
.