On 2025-12-18, Walter Alejandro Iglesias <[email protected]> wrote:
> On Thu, Dec 18, 2025 at 02:16:26PM -0000, Stuart Henderson wrote:
>> On 2025-12-18, Walter Alejandro Iglesias <[email protected]> wrote:
>> > I found the following in sftp(1) source code:
>> >
>> > $ grep editline /usr/src/usr.bin/ssh/*
>> > sftp.c: fatal("Couldn't initialise editline");
>> > sftp.c: fatal("Couldn't initialise editline history");
>> >
>> > I use this line in ~/.editrc:
>> >
>> > bind -v
>> >
>> > That gives me vi-like keybindings in many applications. But it doesn't
>> > work with sftp(1).
>>
>> sftp does use editline, and it does read .editrc.
>>
>> bind -v does do something in sftp (you'll see a behaviour change if you
>> remove it) but it's not normal vi-like handling..
>
> What I see when I remove 'bind -v' from ~/.editrc is that emacs-like
> bindings work. So, the only effect of 'bind -v' in sftp(1) is to
> deactivate emacs-like bindings.
editline(7) says:
The program can switch the default to emacs mode by using the
el_set(3) or el_parse(3) functions, and the user can switch to emacs
mode either in the editrc(5) configuration file or interactively with
the ed-command editor command, in all three cases executing the bind
-e builtin command.
sftp switches the default using 'el_set(el, EL_EDITOR, "emacs")', but
I don't see anything in editline(7) that suggests you can get back from
there to vi mode.
you can at least automatically fix the key bindings like this:
$ cat .editrc
bind -v
sftp:bind -e