Neovim插入模式下如何回到上一行且不丢失前导空格?
问题场景
初始代码(光标位置标记为<HERE>):
function test() { const a = {<HERE>}; // `<HERE>` 是光标位置 }
按下enter键后,自动添加了预期的前导空格:
function test() { const a = { <HERE>}; }
再次按下enter键后:
function test() { const a = { <HERE>}; }
此时想回到上一行但不丢失前导空格,按<C-o>再按k后,光标位置变成了这样:
function test() { const a = { <HERE> }; }
该问题与文件类型无关,在TypeScript、Rust文件中也会出现相同情况。
解决方法
- 临时处理:使用
gk命令替代k,它会让光标保持在当前列的位置,不会跳到行首,回到上一行时就能保留前导空格的位置。 - 永久配置:在Vim配置文件(如
~/.vimrc或~/.config/nvim/init.vim)中添加以下设置,让k和j默认保持光标列位置:
set nostartofline
或者单独映射按键,仅修改k和j的行为:
nnoremap k gk nnoremap j gj
内容的提问来源于stack exchange,提问作者Ilya Ordin
相关产品推荐
相关产品推荐

