Vim:功能副本

时间:2012-05-17 09:04:14

标签: vim

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

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

是否有任何复制整个功能的命令?

8 个答案:

答案 0 :(得分:30)

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

va{Vy
  1. 将光标放在我方法的某处,
  2. va{直观地选择代码块
  3. V将选择从字符方式转换为逐行方式,
  4. y to yank
  5. 如果你太深而且va{只选择了一部分功能,那么在选择你想要的内容之前,你可以做更多a{

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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

许多文件类型也定义了函数的折叠。有了这个,你可以使用zCyyzO(关闭所有折叠,在光标下划动整个折叠,打开折叠)。

答案 3 :(得分:1)

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

它将:
y-扬克
i-内部
p-段落

答案 4 :(得分:0)

将光标置于函数的起点,然后使用yapyip

  • yip:拉动内部段落
  • yap:提取段落

答案 5 :(得分:0)

古老的问题,但我保留在vimrc中的某些内容对于在大括号或括号(Java,PHP等)中包装函数体的语言非常有效:

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

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

  • [m:转到函数声明的结尾
  • {j:在一个段落的上方向上移动,然后向下移动一行,这有助于多行函数声明。只要您的函数声明中没有空行,{就会起作用。
  • V]m:开始直观地选择(逐行),然后将光标移到功能主体的左括号中
  • %y:将光标移动到函数主体的右括号,然后拉动

答案 6 :(得分:0)

如果函数体中有多个嵌套的{}对,那么获取完整函数体的简便方法是将其包含在vimrc中

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

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

答案 7 :(得分:0)

我也在分享我的。 这适用于 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