On 2024-06-14, Enan Ajmain wrote:
> I use ':b' quite often.  And I use a substring of the bufname to jump to
> that buffer.  Works quite well.
> 
> But a problem is that the substring I provide isn't only matched with
> the buffer names but also the filenames.  See these examples:
> 
>     :ls
>       1 #h   "example\predict.py"           line 25
>       2  a   "deeplog\deeplog.py"           line 0
>       4 %a   "example\train.py"             line 37
>     :b deep<tab>
> 
> Then when I type ":b deep<tab>", the matches shown are:
> 
>     E:\projects\log-parsing\deeplog\example\predict.py
>     deeplog\deeplog.py
>     E:\projects\log-parsing\deeplog\example\train.py
> 
> We can see that vim is matching the filepaths instead of only the buffer
> names.  Can I change this behavior?  Preferably with vimscripting, but
> I'm willing to change source code too since I use this too often.
> 
> To be clear: I want only this match to be shown:
> 
>     deeplog\deeplog.py
The full buffer name _is_ the full file name.  Vim usually tries to
show the user a shorter name such as the relative file name.  If, in
your example, you were to :cd to some other directory and execute
:ls again, you would see those buffer names as full path names.
I don't know of a built-in command or option that will give you what
you want.  I think you would have to write a function that would
search the buffer list for a buffer whose basename or relative path
contained the substring you supplied and execute the :b command with
that name.  Just the bufname() function with the appropriate
file-pattern would do a lot of the work.
You could then create a command to call that function.  The command
name would have to begin with an upper-case letter, but you can also
use :cabbrev to create an abbreviation that expands 'b' at the
beginning of the command line to your command name.  That would let
you continue to use the :b command that your fingers are used to.
For <tab> to work, you'd also need to create a completion function
that followed the same matching rules as your buffer function.
Maybe not simple, but doable in vimscript.
HTH,
Gary
-- 
-- 
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
--- 
You received this message because you are subscribed to the Google Groups "vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/vim_use/20240614193251.GA15474%40phoenix.
No comments:
Post a Comment