mirror of
https://github.com/neovim/neovim.git
synced 2025-09-16 08:18:17 +00:00
feat(defaults): jump between :terminal shell prompts with ]]/[[ #32736
This commit is contained in:
@@ -244,6 +244,8 @@ DEFAULTS
|
||||
• |[a|, |]a|, |[A|, |]A| navigate through the |argument-list|
|
||||
• |[b|, |]b|, |[B|, |]B| navigate through the |buffer-list|
|
||||
• |[<Space>|, |]<Space>| add an empty line above and below the cursor
|
||||
• |[[| and |]]| in Normal mode jump between shell prompts for shells which emit
|
||||
OSC 133 sequences ("shell integration" or "semantic prompts").
|
||||
|
||||
• Snippet:
|
||||
• `<Tab>` in Insert and Select mode maps to `vim.snippet.jump({ direction = 1 })`
|
||||
|
@@ -185,6 +185,32 @@ clipboard.
|
||||
OSC 52 sequences sent from the :terminal buffer do not emit a |TermRequest|
|
||||
event. The event is handled directly by Nvim and is not forwarded to plugins.
|
||||
|
||||
OSC 133: shell integration *terminal-osc133*
|
||||
|
||||
Some shells will emit semantic escape sequences (OSC 133) to mark the
|
||||
beginning and end of a prompt. The start of a prompt is marked with the
|
||||
sequence `OSC 133 ; A`. Nvim can be configured to create signs in terminal
|
||||
buffers marking shell prompts. Example: >lua
|
||||
|
||||
local ns = vim.api.nvim_create_namespace('terminal_prompt_markers')
|
||||
vim.api.nvim_create_autocmd('TermRequest', {
|
||||
callback = function(args)
|
||||
if string.match(args.data.sequence, '^\027]133;A') then
|
||||
local lnum = args.data.cursor[1]
|
||||
vim.api.nvim_buf_set_extmark(args.buf, ns, lnum - 1, 0, {
|
||||
-- Replace with sign text and highlight group of choice
|
||||
sign_text = '▶',
|
||||
sign_hl_group = 'SpecialChar',
|
||||
})
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
-- Enable signcolumn in terminal buffers
|
||||
vim.api.nvim_create_autocmd('TermOpen', {
|
||||
command = 'setlocal signcolumn=auto',
|
||||
})
|
||||
<
|
||||
==============================================================================
|
||||
Status Variables *terminal-status*
|
||||
|
||||
|
@@ -181,7 +181,10 @@ nvim.terminal:
|
||||
when 'background' is "light". While this may not reflect the actual
|
||||
foreground/background color, it permits 'background' to be retained for a
|
||||
nested Nvim instance running in the terminal emulator.
|
||||
- TermOpen: Sets default options for |terminal| buffers:
|
||||
- TermRequest: Nvim will create extmarks for shells which
|
||||
annotate their prompts with OSC 133 escape sequences, enabling users to
|
||||
quickly navigate between prompts using |[[| and |]]|.
|
||||
- TermOpen: Sets default options and mappings for |terminal| buffers:
|
||||
- 'nomodifiable'
|
||||
- 'undolevels' set to -1
|
||||
- 'textwidth' set to 0
|
||||
@@ -193,6 +196,7 @@ nvim.terminal:
|
||||
- 'foldcolumn' set to "0"
|
||||
- 'winhighlight' uses |hl-StatusLineTerm| and |hl-StatusLineTermNC| in
|
||||
place of |hl-StatusLine| and |hl-StatusLineNC|
|
||||
- |[[| and |]]| to navigate between shell prompts
|
||||
|
||||
nvim.cmdwin:
|
||||
- CmdwinEnter: Limits syntax sync to maxlines=1 in the |cmdwin|.
|
||||
|
Reference in New Issue
Block a user