aboutsummaryrefslogtreecommitdiff
path: root/runtime
diff options
context:
space:
mode:
Diffstat (limited to 'runtime')
-rw-r--r--runtime/doc/autocmd.txt2
-rw-r--r--runtime/doc/builtin.txt4
-rw-r--r--runtime/doc/editing.txt39
-rw-r--r--runtime/doc/eval.txt7
-rw-r--r--runtime/doc/news.txt6
-rw-r--r--runtime/doc/recover.txt9
-rw-r--r--runtime/doc/vim_diff.txt5
-rw-r--r--runtime/lua/vim/_editor.lua17
-rw-r--r--runtime/lua/vim/_meta/vimfn.lua4
9 files changed, 62 insertions, 31 deletions
diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt
index 90211fc5db..7ca9996e15 100644
--- a/runtime/doc/autocmd.txt
+++ b/runtime/doc/autocmd.txt
@@ -118,7 +118,7 @@ manually. Mostly the screen will not scroll up, thus there is no hit-enter
prompt. When one command outputs two messages this can happen anyway.
==============================================================================
-3. Removing autocommands *autocmd-remove*
+3. Removing autocommands *autocmd!* *autocmd-remove*
:au[tocmd]! [group] {event} {aupat} [++once] [++nested] {cmd}
Remove all autocommands associated with {event} and
diff --git a/runtime/doc/builtin.txt b/runtime/doc/builtin.txt
index c5c941a4bf..6de7166f83 100644
--- a/runtime/doc/builtin.txt
+++ b/runtime/doc/builtin.txt
@@ -7843,8 +7843,8 @@ swapinfo({fname}) *swapinfo()*
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
diff --git a/runtime/doc/editing.txt b/runtime/doc/editing.txt
index 10b578fc73..7df2eb9742 100644
--- a/runtime/doc/editing.txt
+++ b/runtime/doc/editing.txt
@@ -169,33 +169,26 @@ If you want to keep the changed buffer without saving it, switch on the
2. Editing a file *edit-a-file*
*:e* *:edit* *reload*
-:e[dit] [++opt] [+cmd] Edit the current file. This is useful to re-edit the
+:e[dit][!] [++opt] [+cmd]
+ Edit the current file. This is useful to re-edit the
current file, when it has been changed outside of Vim.
- This fails when changes have been made to the current
- buffer and 'autowriteall' isn't set or the file can't
- be written.
- Also see |++opt| and |+cmd|.
-
*:edit!* *discard*
-:e[dit]! [++opt] [+cmd]
- Edit the current file always. Discard any changes to
- the current buffer. This is useful if you want to
- start all over again.
+ If [!] is given, unsaved changes in the current buffer
+ are discarded. Without [!] the command fails if there
+ are unsaved changes, unless 'autowriteall' is set and
+ the file can be written.
Also see |++opt| and |+cmd|.
*:edit_f*
-:e[dit] [++opt] [+cmd] {file}
+:e[dit][!] [++opt] [+cmd] {file}
Edit {file}.
- This fails when changes have been made to the current
- buffer, unless 'hidden' is set or 'autowriteall' is
- set and the file can be written.
- Also see |++opt| and |+cmd|.
-
*:edit!_f*
-:e[dit]! [++opt] [+cmd] {file}
- Edit {file} always. Discard any changes to the
- current buffer.
+ If [!] is given, unsaved changes in the current buffer
+ are discarded. Without [!] the command fails if there
+ are unsaved changes, unless 'hidden' is set or
+ 'autowriteall' is set and the file can be written.
Also see |++opt| and |+cmd|.
+
*:edit_#* *:e#*
:e[dit] [++opt] [+cmd] #[count]
Edit the [count]th buffer (as shown by |:files|).
@@ -1224,10 +1217,10 @@ MULTIPLE WINDOWS AND BUFFERS *window-exit*
*:confirm* *:conf*
:conf[irm] {command} Execute {command}, and use a dialog when an
operation has to be confirmed. Can be used on the
- |:q|, |:qa| and |:w| commands (the latter to override
- a read-only setting), and any other command that can
- fail in such a way, such as |:only|, |:buffer|,
- |:bdelete|, etc.
+ |:edit|, |:q|, |:qa| and |:w| commands (the latter to
+ override a read-only setting), and any commands that
+ can fail because of unsaved changes, such as |:only|,
+ |:buffer|, |:bdelete|, etc.
Examples: >
:confirm w foo
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 3cd5ea13f6..c41237b862 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -2276,12 +2276,13 @@ v:stderr |channel-id| corresponding to stderr. The value is always 2;
:call chansend(v:stderr, "error: toaster empty\n")
<
*v:swapname* *swapname-variable*
-v:swapname Only valid when executing |SwapExists| autocommands: Name of
- the swap file found. Read-only.
+v:swapname Name of the swapfile found.
+ Only valid during |SwapExists| event.
+ Read-only.
*v:swapchoice* *swapchoice-variable*
v:swapchoice |SwapExists| autocommands can set this to the selected choice
- for handling an existing swap file:
+ for handling an existing swapfile:
'o' Open read-only
'e' Edit anyway
'r' Recover
diff --git a/runtime/doc/news.txt b/runtime/doc/news.txt
index 3c20e52155..f0d01f92e7 100644
--- a/runtime/doc/news.txt
+++ b/runtime/doc/news.txt
@@ -114,6 +114,12 @@ The following new APIs and features were added.
• Builtin TUI can now recognize "super" (|<D-|) and "meta" (|<T-|) modifiers in a
terminal emulator that supports |tui-csiu|.
+• Editor
+ • By default, the swapfile "ATTENTION" |E325| dialog is skipped if the
+ swapfile is owned by a running Nvim process, instead of prompting. If you
+ always want the swapfile dialog, delete the default SwapExists handler:
+ `autocmd! nvim_swapfile`. |default-autocmds|
+
• LSP
• LSP method names are available in |vim.lsp.protocol.Methods|.
• Implemented LSP inlay hints: |vim.lsp.inlay_hint()|
diff --git a/runtime/doc/recover.txt b/runtime/doc/recover.txt
index b05bcd6bc8..e6b5b06744 100644
--- a/runtime/doc/recover.txt
+++ b/runtime/doc/recover.txt
@@ -83,6 +83,15 @@ Detecting an existing swap file ~
You can find this in the user manual, section |11.3|.
+ *W325*
+The default |SwapExists| handler (|default-autocmds|) skips the |E325| prompt
+(selects "(E)dit") if the swapfile owner process (1) is still running and (2)
+was started by the current user. This presumes that you normally don't want
+to be bothered with the |ATTENTION| message just because you happen to edit
+the same file from multiple Nvim instances. In the worst case (a system
+crash) there will be more than one swapfile for the file; use |:recover| to
+inspect all of its swapfiles.
+
Updating the swapfile ~
diff --git a/runtime/doc/vim_diff.txt b/runtime/doc/vim_diff.txt
index 3bf844a139..e9c04443a6 100644
--- a/runtime/doc/vim_diff.txt
+++ b/runtime/doc/vim_diff.txt
@@ -139,6 +139,11 @@ nvim_terminal:
nvim_cmdwin:
- CmdwinEnter: Limits syntax sync to maxlines=1 in the |cmdwin|.
+nvim_swapfile:
+- SwapExists: Skips the swapfile prompt (sets |v:swapchoice| to "e") when the
+ swapfile is owned by a running Nvim process. Shows |W325| "Ignoring
+ swapfile…" message.
+
==============================================================================
New Features *nvim-features*
diff --git a/runtime/lua/vim/_editor.lua b/runtime/lua/vim/_editor.lua
index 7f09fc8038..1ba7d6163d 100644
--- a/runtime/lua/vim/_editor.lua
+++ b/runtime/lua/vim/_editor.lua
@@ -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()
diff --git a/runtime/lua/vim/_meta/vimfn.lua b/runtime/lua/vim/_meta/vimfn.lua
index 55c324d739..5a3a5f3890 100644
--- a/runtime/lua/vim/_meta/vimfn.lua
+++ b/runtime/lua/vim/_meta/vimfn.lua
@@ -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