mirror of
https://github.com/neovim/neovim.git
synced 2025-10-26 12:27:24 +00:00
feat: ignore swapfile for running Nvim processes #25336
Problem:
The swapfile "E325: ATTENTION" dialog is displayed when editing a file
already open in another (running) Nvim. Usually this behavior is
annoying and irrelevant:
- "Recover" and the other options ("Open readonly", "Quit", "Abort") are
almost never wanted.
- swapfiles are less relevant for "multi-Nvim" since 'autoread' is
enabled by default.
- Even less relevant if user enables 'autowrite'.
Solution:
Define a default SwapExists handler which does the following:
1. If the swapfile is owned by a running Nvim process, automatically
chooses "(E)dit anyway" (caveat: this creates a new, extra swapfile,
which is mostly harmless and ignored except by `:recover` or `nvim -r`.
2. Shows a 1-line "ignoring swapfile..." message.
3. Users can disable the default SwapExists handler via `autocmd! nvim_swapfile`.
This commit is contained in:
@@ -1147,11 +1147,28 @@ function vim._init_default_autocmds()
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
vim.api.nvim_create_autocmd({ 'CmdwinEnter' }, {
|
||||
pattern = '[:>]',
|
||||
group = vim.api.nvim_create_augroup('nvim_cmdwin', {}),
|
||||
command = 'syntax sync minlines=1 maxlines=1',
|
||||
})
|
||||
|
||||
vim.api.nvim_create_autocmd({ 'SwapExists' }, {
|
||||
pattern = '*',
|
||||
group = vim.api.nvim_create_augroup('nvim_swapfile', {}),
|
||||
callback = function()
|
||||
local info = vim.fn.swapinfo(vim.v.swapname)
|
||||
local user = vim.uv.os_get_passwd().username
|
||||
local iswin = 1 == vim.fn.has('win32')
|
||||
if info.error or info.pid <= 0 or (not iswin and info.user ~= user) then
|
||||
vim.v.swapchoice = '' -- Show the prompt.
|
||||
return
|
||||
end
|
||||
vim.v.swapchoice = 'e' -- Choose "(E)dit".
|
||||
vim.notify(('W325: Ignoring swapfile from Nvim process %d'):format(info.pid))
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
function vim._init_defaults()
|
||||
|
||||
4
runtime/lua/vim/_meta/vimfn.lua
generated
4
runtime/lua/vim/_meta/vimfn.lua
generated
@@ -9312,8 +9312,8 @@ function vim.fn.swapfilelist() end
|
||||
--- user user name
|
||||
--- host host name
|
||||
--- fname original file name
|
||||
--- pid PID of the Vim process that created the swap
|
||||
--- file
|
||||
--- pid PID of the Nvim process that created the swap
|
||||
--- file, or zero if not running.
|
||||
--- mtime last modification time in seconds
|
||||
--- inode Optional: INODE number of the file
|
||||
--- dirty 1 if file was modified, 0 if not
|
||||
|
||||
Reference in New Issue
Block a user