我发现可以在插入模式下执行单个命令并使用 Ctrl-O 返回插入模式。
在正常模式下插入单个单词的可能性如何?
当然,我可以切换到插入模式,写入单词,转义并返回正常模式。
但我想知道是否可以映射一个序列(例如 Ctrl-K),允许在不离开正常模式的情况下快速在光标位置添加一个单词?
我尝试使用提示映射函数(参见问题 11567596 - Ingo Karkat 的答案 - 和 Wikia 提示 1616)但失败了:该词被附加在行尾...
我发现可以在插入模式下执行单个命令并使用 Ctrl-O 返回插入模式。
在正常模式下插入单个单词的可能性如何?
当然,我可以切换到插入模式,写入单词,转义并返回正常模式。
但我想知道是否可以映射一个序列(例如 Ctrl-K),允许在不离开正常模式的情况下快速在光标位置添加一个单词?
我尝试使用提示映射函数(参见问题 11567596 - Ingo Karkat 的答案 - 和 Wikia 提示 1616)但失败了:该词被附加在行尾...
我最好的建议是采用插入模式;这是vi 方式 TM。
说真的,我也有创建映射的想法,让我可以输入一个单词/句子/任何东西,然后自动返回正常模式。但...
无论您使用input()
来自 romainl 的答案,还是更复杂的方法(例如使用CursorMovedI
钩子),您都必须按Enter或其他键来表示您已完成。这并不比按Esc正常方式离开插入模式更好!
您只是让事情变得更复杂:您为此花费了宝贵的(短)键序列,您必须花费大脑周期来在两种方法之间做出决定,您的肌肉记忆必须学会输入文本的方法,而这些特殊功能在其他方法中是不可用的vi 模式(例如在 Bash 中)。
所以,我认为这不值得。
这个简单的功能在这里有效:
function! InsertWord()
let l:user_word = input("Type something then hit ENTER: ")
execute "normal i".l:user_word
endfunction
command! InsertWord call InsertWord()
nnoremap <C-k> :InsertWord<CR>
不过,整个事情可能会缩短为一条直线,但我喜欢这样。