Vim: копия функции

Есть ли команда для копирования полной функции? (Не путем выбора мыши)

ex: 10yy → скопирует строки 10 из позиции курсора.
Я не знаю никаких строк функции, но хочу скопировать всю функцию.

Есть ли какая-либо команда для копирования всей функции?

Ответ 1

Это то, что я делаю в JavaScript и PHP:

va{Vy
  • Поместите курсор где-нибудь в моем методе,
  • va{, чтобы визуально выбрать блок кода,
  • V, чтобы повернуть выделение от символа к строке,
  • y, чтобы выдернуть

Если вы слишком глубоки и va{ выбирает только часть вашей функции, вы можете сделать больше a{, пока не выберете то, что хотите.

Ответ 2

Если вы используете VIM и тело функции на языке программирования, вы попадаете в скобки, вы можете просто поместить курсор на одну из фигурных скобок и введите y%.

Ответ 3

Языки Curly-braces (например, Java) могут использовать команды ]m для навигации по функциям; некоторые типы файлов также определяют ]] для этого. При этом вы можете использовать [mV]My (перейти к началу функции, начать визуальный режим линии, перейти к концу функции, yank).

Многие типы файлов также определяют сворачивание функций. При этом вы можете использовать zCyyzO (закрыть все сгибы, вытащить всю складку под курсором, открыть сгиб).

Ответ 4

Учитывая, что ваша функция окружена переносами строк, вы можете использовать yip

который будет:
y - дергать
i - внутренний
p - абзац

Ответ 5

Наведите курсор на начальную точку функции, а затем использовать yap или yip.

  • yip: дергать внутренний абзац
  • трепло: дергать параграф

Ответ 6

Старый вопрос, но здесь я сохраняю что-то в моем vimrc, которое работает прилично хорошо для языков, которые заключают тела функций в фигурные скобки или в скобки (Java, PHP и т.д.):

nnoremap <silent> yaf [m{jV]m%y

Это отображает связывание клавиш yaf (yank a function), которое будет работать где угодно внутри тела функции. Это работает следующим образом:

  • [m: перейти к концу объявления функции
  • {j: переместиться прямо над одним абзацем вверх, затем переместиться на одну строку вниз, это помогает с объявлениями многострочных функций. { будет работать до тех пор, пока в объявлении вашей функции нет пустых строк.
  • V]m: начать визуальный выбор (по линии), а затем переместить курсор к открывающей скобке тела функции
  • %y: переместите курсор к закрывающей скобке тела функции, затем нажмите