如何在Vim中返回到上一点

nhaq1z21  于 2022-11-11  发布在  其他
关注(0)|答案(4)|浏览(322)

在Vim中有一个命令''.'可以精确地返回到上次编辑文本的位置。
但我的问题是:我的意思是,每次我退出并重新打开同一个文件,它就会把我带到我离开的地方。
我看到我朋友的Vim有这种行为,但他不知道怎么做。

vlf7wbxs

vlf7wbxs2#

我经常使用这些命令:
CTRL-O转到[count]跳转列表中较早的光标位置(不是运动命令)。
CTRL-I转到跳转列表中的[count]个较新的光标位置(不是运动命令)。
ma在光标位置设置标记a(不移动光标,这不是运动命令)。
'a跳转到当前缓冲区中的标记a
gi在当前缓冲区中上次停止插入模式的位置插入文本。

kadbb459

kadbb4593#

请阅读::help last-position-jump

fjaof16o

fjaof16o4#

将这几行放在~/.vimrc文件中

" When editing a file, always jump to the last cursor position
 autocmd BufReadPost *
 \ if line("'\"") > 0 && line("'\"") <= line("$") |
 \   exe "normal g`\"" |
 \ endif

这只会帮助你下次打开vim恢复你的光标位置。
另一个方法是将它放在你的~/.bashrc上

lvim='vim -c "normal '\''0"'

它将允许您打开上次编辑的文件。

更新!

alias lvim="vim -c':e#<1'"

上面的别名将在命令模式-c下打开vim,以编辑替代文件#,在本例中是第一个<1,也就是最后一个。
对于neovim我有这个:
在您的init.lua

require('autocmds')

在您的lua目录中创建一个名为autocmds.lua的文件:

local augroups = {}

augroups.restore_position {

restore_cursor_position = {
    event = "BufRead",
    pattern = "*",
    command = [[call setpos(".", getpos("'\""))]],
},

}

for group, commands in pairs(augroups) do
local augroup = vim.api.nvim_create_augroup("AU_"..group, {clear = true})

for _, opts in pairs(commands) do
    local event = opts.event
    opts.event = nil
    opts.group = augroup
    vim.api.nvim_create_autocmd(event, opts)
end
end

相关问题