On 03/11/2011 09:55 AM, Jeroen Budts wrote:
On 03/11/2011 05:06 AM, KF wrote:
On Mar 10, 5:35 pm, Jeroen Budts<[email protected]> wrote:
Hi,
I'm looking for the quickest method to yank an entire (php) function
when the cursor is somewhere in the first line of the function
definition like this (| = cursor):
fun|ction foobar() {
if (true) {
return "not false :)";
}
}
One possible solution would be:
jvaBVy
But I'm wondering if there it is possible in a shorter way and maybe
without using visual mode.
Another solution I found is:
v][Vy
But this only seems to work if the function itself is not indented and
when i tried it without visual mode (^y][) it didn't include the last
line (}).
You can redefine the ][ meaning: [ :help section ]
:map ][ /}<CR>b99]}
and using your sequence, should work quite well:
v][Vy
It seems that only way to go is using visual mode...
I tried this mapping but it doesn't seem to work for me when i try this
in a PHP class (functions are indented by 4 spaces). It jumps always to
the last } in the file, which is the } to close the class definition.
But while I was looking up the help on ][ (:help ][) and read about ]]
as well and I noticed that this also only looks for the } on the first
column. However, I have been using the ]] command successfully in PHP
files to jump from function to function when functions are indented
(because they are part of a class).
So this made me realize that the ]] command was already remapped
somewhere. After searching a bit (with :verbose map ]]?) I discovered
that the ftplugin for php (/usr/share/vim/vim73/ftplugin/php.vim in my
case) remaps the ]] and [[ commands (line 69) to be 'php-aware'. Sadly
it does not remap the ][ and [] to be as intelligent as well.
So now I'm wondering, shouldn't the php ftplugin be modified to also
remap the ][ and [] commands so they have a more consistent and
to-be-expected behavior? And would it be possible to come create a
working mapping? I guess something like 'search back for the nearest
class/function/interface definition, calculate the indent of that line,
and search for the first } with the same indent' could work (but only if
the php code is correctly indented)?
After reading some more vim documentation I discovered the [M command.
According to the documentation this is specific for Java code, but since
PHP classes are very similar in code to java, it works for PHP as well.
Sadly this only works for PHP methods which are defined in a class. For
functions which are not in a class [M jumps to the opening { of the
function, but 2[M correctly jumps to the end.
So maybe the php ftplugin could be modified to redefine ][ to check
whether the cursor is inside a class and, if so, call [M, if not call 2[M?
Jeroen
--
website: http://budts.be/ - twitter: @teranex
___________________________________
Registered Linux User #482240 - GetFirefox.com - ubuntu.com
--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php