mirror of
https://github.com/zsh-users/zsh-autosuggestions.git
synced 2024-12-30 00:03:56 +08:00
676aebdf44
Typing `d` and then `l` runs `vi-delete` and then `vi-forward-char`. However, by default, `vi-forward-char` is configured to accept the suggestion. So in that case, the suggestion was being accepted and the cursor set to the end of the buffer before the deletion was run. The reason the user doesn't see the suggestion accepted is that `vi-delete` doesn't finish until the movement widget is run, so we're already inside of a `modify` when `accept` is called. `modify` unsets `POSTDISPLAY` before calling the original widget so when we get to the accept function, `POSTDISPLAY` is empty and thus accepting the suggestion is a no-op. The fix is to make sure we reset the cursor to the correct place before running the original widget. We skip the test for versions of zsh below 5.0.8 since there was a bug in earlier versions where deleting the last char did not work. See http://www.zsh.org/mla/workers/2014/msg01316.html
81 lines
2.1 KiB
Ruby
81 lines
2.1 KiB
Ruby
describe 'when using vi mode' do
|
|
let(:before_sourcing) do
|
|
-> do
|
|
session.run_command('bindkey -v')
|
|
end
|
|
end
|
|
|
|
describe 'moving the cursor after exiting insert mode' do
|
|
it 'should not clear the current suggestion' do
|
|
with_history('foobar foo') do
|
|
session.
|
|
send_string('foo').
|
|
send_keys('escape').
|
|
send_keys('h')
|
|
|
|
wait_for { session.content }.to eq('foobar foo')
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '`vi-forward-word-end`' do
|
|
it 'should accept through the end of the current word' do
|
|
with_history('foobar foo') do
|
|
session.
|
|
send_string('foo').
|
|
send_keys('escape').
|
|
send_keys('e'). # vi-forward-word-end
|
|
send_keys('a'). # vi-add-next
|
|
send_string('baz')
|
|
|
|
wait_for { session.content }.to eq('foobarbaz')
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '`vi-forward-word`' do
|
|
it 'should accept through the first character of the next word' do
|
|
with_history('foobar foo') do
|
|
session.
|
|
send_string('foo').
|
|
send_keys('escape').
|
|
send_keys('w'). # vi-forward-word
|
|
send_keys('a'). # vi-add-next
|
|
send_string('az')
|
|
|
|
wait_for { session.content }.to eq('foobar faz')
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '`vi-find-next-char`' do
|
|
it 'should accept through the next occurrence of the character' do
|
|
with_history('foobar foo') do
|
|
session.
|
|
send_string('foo').
|
|
send_keys('escape').
|
|
send_keys('f'). # vi-find-next-char
|
|
send_keys('o').
|
|
send_keys('a'). # vi-add-next
|
|
send_string('b')
|
|
|
|
wait_for { session.content }.to eq('foobar fob')
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '`vi-delete`' do
|
|
it 'should be able to remove the last character in the buffer' do
|
|
skip 'deleting last char did not work below zsh version 5.0.8' if session.zsh_version < Gem::Version.new('5.0.8')
|
|
|
|
session.
|
|
send_string('echo foo').
|
|
send_keys('escape').
|
|
send_keys('d').
|
|
send_keys('l')
|
|
|
|
wait_for { session.content }.to eq('echo fo')
|
|
end
|
|
end
|
|
end
|