Как переопределить стандартное поведение «y» и «d»

#vim #mapping

#vim #сопоставление

Вопрос:

Я хочу сопоставить некоторые комбинации. Я читал :h map долгое время, но я до сих пор не понимаю, как сопоставить «d» и «y», чтобы они выполняли следующие действия ( { } необязательно):

               d{count}{movment} =>     "_d{count}{movment}
{"reg}<Leader>d{count}{movment} => {"reg}d{count}{movment}
  

Я хочу d действительно удалить текст, чтобы знакомые d3d , d3w , diw , и т.д. действительно удаляли текст. <Leader>d вырезать в регистр "1 (если не указано) или в конкретный регистр.

      y{count}{movment} =>      y{count}{movment} call my_func()
"reg y{count}{movment} => "reg y{count}{movment}
  

То же самое с y , но здесь y{count}{movment} необходимо скопировать и вызвать мою функцию. И "reg y{count}{movment} просто должен работать как обычно.

Я бы хотел, чтобы это работало в визуальном и обычном режиме.

Ответ №1:

  1. Это зло, и его не следует делать. Это имеет смысл только в том случае, если вы ищете личный «вызов», но в этом случае вам лучше понять это самостоятельно. Но если вам все еще нужна подсказка, я бы, наверное, начал с :h 'opfunc'

  2. Это легко достижимо, если ваш Vim достаточно современный (8.1 ). Просто перехватывайте :h TextYankPost и делайте свои вещи оттуда.