VIM: php tüm işlev tanımını nasıl seçilir

5 Cevap php

Php, ben bir işlevi varsa, örneğin:

function test($b) {

  var $a = 0;

  while ($a < b) {
    $a += 3;
  }

  return $a;
}

If the cursor is on the $a += 3 line, is it possible to quickly select the entire function? "v2aB" would select everything including the function braces but not the declaration "function test($b) "

5 Cevap

Basın V seçim komuta sonra line selection için seçimi dönüştürmek için, yayınlamak ve bu işlevi bildirimi seçecektir:

v 2 a B V

Burada, çok iyi çalışmıyor hiçbir yuvalama düzeyini önemli görünüyor bir eşleme bulunuyor.

:map t ? function <CR>f{vaBV

Burada çalışacak başka bir yöntem Eğer fonksiyon düzeyi katlama açık varsa: z c v

Yani mevcut kat kapatır ve onu seçer, ama o kapalı bırakır. Eğer açık kalmasını istiyorsanız: z c v $

2 z c {: Eğer blok düzeyi katlama açık varsa, size döngü içindeyken madem, iki kez yakın, öylesine olurdu [(3)]}

PHP sınıf / fonksiyon katlama etkinleştirmek için: let php_folding = 1

basit bir yolu

nmap vaf va}V

Bunu beğendim

nmap vaf [{?function<CR>:nohl<CR>vf{]}

'{' yeni hat ise

nmap vaF [{?function<CR>:nohl<CR>v/{<CR>]}

Bu soru sorulan ve cevap oldu bu yana uzun bir zaman oldu, ama ben arıyordum ve diğerlerinin hiçbiri tam olarak bu gibi çalışır biri çünkü benim kendi cevap katacak:

nnoremap vaf ?func.*\n*\s*{<cr>ma/{<cr>%mb`av`b
vmap af o<esc>kvaf

İlk haritalama, "fonksiyon etrafında Görsel" veya vaf, { aynı hat veya bir sonraki olduğunu ne olursa olsun, geri fonksiyon tanımının başlangıcına atlamak olacak ve Bir lambda fonksiyonu, ve görsel olarak desteğini biten ediyor it characterwise seçseniz bile. Bu PHP, Javascript ve Go çalışır.

Kullanıcı daha sonra o isterse seçim moduna linewise açmak için V tuşuna basabilirsiniz.

Ben buldum tek sorun olduğu zaman ben büyük bir işlevi vücutta değilim, ama bir lambda fonksiyonu (en "küçük" diyelim) kullanan bir çizgi altında, bu küçük fonksiyonun başında ararken durdurmak ve onun seçecek vücut yerine büyük işlevinin başlangıç ​​ulaşan ve vücudun tüm seçin.

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"
}

Geçici bir çözüm olarak ben ikinci eşleme kullanın: vmap af o<esc>kvaf. Bu seçim bir tekrarı veya genişleme gibi hissediyor. Gerçekten ne yapar seçimi terk ve ondan önce satırına gidin ve sonra agan bunu deneyin. "Büyük" fonksiyonu birkaç lambda fonksiyonlarını kullanır eğer kullanıcı büyük olanı ulaşmak için af birkaç kez tekrarlamak zorunda.

Genellikle, vaf Yeterince es. Bazen vaf af ya da vaf af af gereklidir. Her neyse, ben ne istediğini alabilir yakın, yani bu ben kullanıyorum sürümüdür.