是否有复制完整功能的命令?(不是通过鼠标选择)
例如: --> 将从光标位置10yy
复制行。
我不知道函数的行数,但想复制整个函数。 10
有没有复制整个函数的命令?
这就是我在 JavaScript 和 PHP 中所做的:
va{Vy
va{
直观地选择代码块,V
将选择从按字符转换为按行,y
拉扯如果你太深了,va{
只选择了你的功能的一部分,你可以做更多a{
,直到你选择你想要的。
如果您使用的是 VIM,并且编程语言中的函数体恰好用大括号括起来,您只需将光标放在其中一个大括号上并键入y%
.
鉴于您的函数被换行符包围,您可以使用yip
这将:
y
- 拉
i
- 内部
p
- 段落
花括号语言(如 Java)可以使用]m
命令导航到函数;一些文件类型也]]
为此定义。有了这个,您可以使用[mV]My
(转到函数的开头,开始逐行可视模式,转到函数的结尾,猛拉)。
许多文件类型还定义了函数的折叠。有了它,您可以使用zCyyzO
(关闭所有折叠,拉动光标下的整个折叠,打开折叠)。
如果你的函数体中有多个嵌套的 {} 对,提取完整函数体的最简单方法是在你的 vimrc 中包含它
nn yaf ?function<CR>$V%y<CR>
将光标放在函数体内的任意位置,然后按 yaf。
我也在分享我的。这适用于 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
老问题,但这是我保留在我的 vimrc 中的一些东西,它适用于将函数体包装在花括号或括号中的语言(Java、PHP 等):
nnoremap <silent> yaf [m{jV]m%y
这映射了键绑定yaf
(yank 一个函数),它将在函数体内的任何地方工作。它的工作原理如下:
[m
: 转到函数声明的末尾{j
: 向上移动一段然后向下移动一行,这有助于多行函数声明。{
只要你的函数声明里面没有空行就可以工作。V]m
:开始视觉选择(逐行),然后将光标移动到函数体的左括号%y
: 将光标移动到函数体的右括号,然后猛拉将光标放在函数的起点,然后使用yap
或yip
。