2017-02-01 3 views
0

В Vim есть более элегантный способ, чтобы перейти к номеру строки под курсором, чемметод Vim для перехода на номер под курсором

map gn "[email protected] 

«дп» или какой-либо другой ключевой комбо? Это требует, чтобы курсор находился в начале строки чисел. Кроме того, этот макрос МОЖЕТ быть немного опасным в зависимости от того, что находится в регистре «n».

Не совсем уверен даже в том, почему это работает: @n означает выполнить то, что находится в регистре n (число), а не объединить его с «G».

Функции с чем-то вроде

call cursor(expand("<cword>"),1) 

, кажется, не работает.

Мысли?

ответ

5

Порекомендую:

nnoremap gn yiw:exec (@" =~ '^\d\+$' ? 'norm @"G' : '')<cr> 

Он исправляет множество проблем, о которых Вы упомянули, например:

  • это требует обеспечения курсор находится в начале слово (слово «здесь» означает строку чисел).

    Использование yiw вместо yw устраняет эту проблему. Читайте дальше: text objects!

  • также, этот макрос МОЖЕТ быть немного опасным в зависимости от того, что находится в регистре «n».

    Это будет выполнять только любой код, если ваш курсор находится над числом. В противном случае он ничего не делает.

Есть также некоторые другие преимущества:

  • Использование nnoremap вместо map является лучшей практикой. Это сэкономит вам много головных болей по дороге! (more info)

  • Это не беспорядок с вашим регистром @n.

не совсем уверен даже, почему это работает: @n значит выполнить то, что в регистре п (число), не сцепить его с «G».

Ввод @n вставляет текст внутри регистра n в буфер типа-head точно так же, как если бы вы его набрали. Поэтому, если команда недоделана, она будет сидеть там (как если бы вы ее набрали), ожидая завершения команды.Можно даже запустить макрос как

3d 

, который будет сидеть там в ожидании движения, перед удалением трех из этих движений.

+1

квалифицированно сделано, пояснено. Важным отличием (по крайней мере, для меня) является то, как интерпретируется команда. wrt @n не «выполняет n», это модификатор, который удерживается в «командной строке» (из-за отсутствия лучшего термина) до завершения строки с движением. это совершенно ясно. – wmmso

Смежные вопросы