在PHP中,如果我有一个如下函数:
function test($b) {
  var $a = 0;
  while ($a < b) {
    $a += 3;
  }
  return $a;
}
并且光标$a += 3在线上,是否可以快速选择整个功能?
"v2aB"将选择包括函数括号在内的所有内容,但不会选择声明 function test($b)
CMS*_*CMS 10
V在您发布的选择命令后按,将选择转换为行选择,它将选择函数声明:
v2aBV
这个问题被问及答案已经有很长一段时间了,但是我会添加自己的答案,因为它是我正在寻找的那个,而其他人都没有像这个一样工作:
nnoremap vaf ?func.*\n*\s*{<cr>ma/{<cr>%mb`av`b
vmap af o<esc>kvaf
第一个映射,"Visual around function"或者vaf,将跳回到函数定义的开头,无论它{是在同一行还是下一行,即使它是一个lambda函数,并在视觉上选择它的特征是它的结束括号.这适用于PHP,Javascript和Go.
然后用户可以按V以转到行方式选择模式.
我发现的唯一问题是,当我在一个大函数的主体中,但在使用lambda(比如说"小")函数的行下面时,这将停止在小函数的开头搜索并选择它的身体而不是达到大功能的开始,并选择其所有的身体.
function show_video_server(v_server) {
  // this whole function should get selected
  var something = function(){ /* this function gets selected */ };
  //   |   the cursor is here when I type "vaf"
}
作为一种解决方法,我使用第二个映射:vmap af o<esc>kvaf.感觉就像选择的重复或扩展.它真正做的是放弃选择并在它之前前行,然后尝试它.如果"大"函数使用多个lambda函数,则用户必须重复af几次以达到大函数.
通常,vaf足够了.有时vaf af或vaf af af需要.无论如何,它是我能够达到我想要的最接近的,所以这是我正在使用的版本.