18

是否有复制完整功能的命令?(不是通过鼠标选择)

例如: --> 将从光标位置10yy复制行。 我不知道函数的行数,但想复制整个函数。 10

有没有复制整个函数的命令?

4

8 回答 8

47

这就是我在 JavaScript 和 PHP 中所做的:

va{Vy
  1. 将光标放在我的方法中的某个位置,
  2. va{直观地选择代码块,
  3. V将选择从按字符转换为按行,
  4. y拉扯

如果你太深了,va{只选择了你的功能的一部分,你可以做更多a{,直到你选择你想要的。

于 2012-05-17T11:40:09.333 回答
6

如果您使用的是 VIM,并且编程语言中的函数体恰好用大括号括起来,您只需将光标放在其中一个大括号上并键入y%.

于 2012-05-17T09:09:49.567 回答
3

鉴于您的函数被换行符包围,您可以使用yip

这将:
y- 拉
i- 内部
p- 段落

于 2018-08-19T16:22:51.777 回答
2

花括号语言(如 Java)可以使用]m命令导航到函数;一些文件类型也]]为此定义。有了这个,您可以使用[mV]My(转到函数的开头,开始逐行可视模式,转到函数的结尾,猛拉)。

许多文件类型还定义了函数的折叠。有了它,您可以使用zCyyzO(关闭所有折叠,拉动光标下的整个折叠,打开折叠)。

于 2012-05-17T09:51:12.770 回答
1

如果你的函数体中有多个嵌套的 {} 对,提取完整函数体的最简单方法是在你的 vimrc 中包含它

nn yaf ?function<CR>$V%y<CR>

将光标放在函数体内的任意位置,然后按 yaf。

于 2020-11-04T15:10:31.770 回答
1

我也在分享我的。这适用于 C# 和 Js 代码。

" copy method
nnoremap <silent> yaf ?public\|protected\|private\|function<CR>Vj%y
" copy method and paste below
nnoremap <silent> yafp ?public\|protected\|private\|function<CR>Vj%yj%o<ESC>p
" cut method
nnoremap <silent> daf ?public\|protected\|private\|function<CR>Vj%d
于 2021-06-18T14:51:26.430 回答
0

老问题,但这是我保留在我的 vimrc 中的一些东西,它适用于将函数体包装在花括号或括号中的语言(Java、PHP 等):

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

这映射了键绑定yaf(yank 一个函数),它将在函数体内的任何地方工作。它的工作原理如下:

  • [m: 转到函数声明的末尾
  • {j: 向上移动一段然后向下移动一行,这有助于多行函数声明。{只要你的函数声明里面没有空行就可以工作。
  • V]m:开始视觉选择(逐行),然后将光标移动到函数体的左括号
  • %y: 将光标移动到函数体的右括号,然后猛拉
于 2019-06-24T19:39:55.777 回答
0

将光标放在函数的起点,然后使用yapyip

  • yip: yank 内段
  • yap:拉一段
于 2019-03-06T11:55:45.450 回答