是否有复制完整功能的命令? (不是通过鼠标选择)
例如:10yy
- >将从光标位置复制10
行
我不知道函数的行号,但想要复制整个函数。
是否有任何复制整个功能的命令?
答案 0 :(得分:30)
这是我在JavaScript和PHP中所做的:
va{Vy
va{
直观地选择代码块V
将选择从字符方式转换为逐行方式,y
to yank 如果你太深而且va{
只选择了一部分功能,那么在选择你想要的内容之前,你可以做更多a{
。
答案 1 :(得分:3)
如果您正在使用VIM,并且编程语言中的函数体恰好用大括号括起来,您可以将光标放在其中一个大括号上并键入y%
。
答案 2 :(得分:2)
Curly-braces语言(如Java)可以使用]m
命令导航到函数;一些文件类型也为此定义]]
。有了这个,你可以使用[mV]My
(进入函数的开头,开始行的视觉模式,转到函数的结尾,猛拉)。
许多文件类型也定义了函数的折叠。有了这个,你可以使用zCyyzO
(关闭所有折叠,在光标下划动整个折叠,打开折叠)。
答案 3 :(得分:1)
鉴于您的函数周围有换行符,可以使用yip
它将:
y
-扬克
i
-内部
p
-段落
答案 4 :(得分:0)
将光标置于函数的起点,然后使用yap
或yip
。
答案 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