Fix a few things for vim mode

This commit is contained in:
Francesco Abbate 2021-03-23 16:20:07 +01:00
parent 97a00f946d
commit 50bd5e8b2b
1 changed files with 9 additions and 5 deletions

View File

@ -32,15 +32,17 @@ keymap.vim_verbs_imm = {'y', 'p', 'h', 'j', 'k', 'l', 'x', 'i'}
keymap.vim_objects = {'w', '$'} keymap.vim_objects = {'w', '$'}
local vim_object_map = { local vim_object_map = {
['w'] = 'end-of-word', ['w'] = 'next-word-end',
['$'] = 'end-of-line', ['$'] = 'end-of-line',
} }
function keymap.vim_execute(verb, mult, object) function keymap.vim_execute(verb, mult, object)
if verb == '.' then if verb == '.' then
return command.perform_many(mult, 'doc:move-to-' .. vim_object_map[object]) command.perform_many(mult, 'doc:move-to-' .. vim_object_map[object])
elseif verb == 'd' then elseif verb == 'd' then
return command.perform_many(mult, 'doc:delete-to-' .. vim_object_map[object]) command.perform_many(mult, 'doc:select-to-' .. vim_object_map[object])
command.perform('doc:copy')
command.perform('doc:cut')
elseif verb == 'c' then elseif verb == 'c' then
command.perform_many(mult, 'doc:select-to-' .. vim_object_map[object]) command.perform_many(mult, 'doc:select-to-' .. vim_object_map[object])
command.perform('doc:copy') command.perform('doc:copy')
@ -58,6 +60,8 @@ function keymap.vim_execute(verb, mult, object)
command.perform_many(mult, 'doc:delete') command.perform_many(mult, 'doc:delete')
elseif verb == 'i' then elseif verb == 'i' then
command.perform('core:set-insert-mode') command.perform('core:set-insert-mode')
elseif verb == 'p' then
command.perform('doc:paste')
else else
return false return false
end end
@ -122,8 +126,8 @@ function keymap.on_key_pressed(editor_mode, k)
elseif keymap.command_verb == '.' and table_find(keymap.vim_verbs_obj, stroke) then elseif keymap.command_verb == '.' and table_find(keymap.vim_verbs_obj, stroke) then
keymap.command_verb = stroke keymap.command_verb = stroke
return true return true
elseif string.byte(stroke) >= string.byte(1) and string.byte(stroke) <= string.byte(9) then elseif string.byte(k) >= string.byte('1') and string.byte(k) <= string.byte('9') then
keymap.command_mult = tonumber(stroke) keymap.command_mult = tonumber(k)
return true return true
elseif table_find(keymap.vim_objects, stroke) then elseif table_find(keymap.vim_objects, stroke) then
keymap.vim_execute(keymap.command_verb, keymap.command_mult, stroke) keymap.vim_execute(keymap.command_verb, keymap.command_mult, stroke)