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
: переместите курсор к закрывающей скобке тела функции, затем нажмите