mirror of
https://github.com/neovim/neovim.git
synced 2025-09-16 08:18:17 +00:00
refactor!: delete insertmode (#18547)
Neovim already removed `evim` (or any similar flags). The 'insertmode' option is a weird remnant, so get rid of it. The 'insertmode' option is replaced with a script that closely emulates the option. This script is documented at :help 'insertmode'
This commit is contained in:
@@ -1065,8 +1065,7 @@ line contains the command as typed so far. The left column will show a
|
|||||||
character that indicates the type of command-line being edited, see
|
character that indicates the type of command-line being edited, see
|
||||||
|cmdwin-char|.
|
|cmdwin-char|.
|
||||||
|
|
||||||
Vim will be in Normal mode when the editor is opened, except when 'insertmode'
|
Vim will be in Normal mode when the editor is opened.
|
||||||
is set.
|
|
||||||
|
|
||||||
The height of the window is specified with 'cmdwinheight' (or smaller if there
|
The height of the window is specified with 'cmdwinheight' (or smaller if there
|
||||||
is no room). The window is always full width and is positioned just above the
|
is no room). The window is always full width and is positioned just above the
|
||||||
|
@@ -1366,7 +1366,7 @@ option *expr-option* *E112* *E113*
|
|||||||
|
|
||||||
Examples: >
|
Examples: >
|
||||||
echo "tabstop is " .. &tabstop
|
echo "tabstop is " .. &tabstop
|
||||||
if &insertmode
|
if &expandtab
|
||||||
|
|
||||||
Any option name can be used here. See |options|. When using the local value
|
Any option name can be used here. See |options|. When using the local value
|
||||||
and there is no buffer-local or window-local value, the global value is used
|
and there is no buffer-local or window-local value, the global value is used
|
||||||
|
@@ -224,9 +224,6 @@ some modes:
|
|||||||
Cmdline <C-C> <C-\><C-G>
|
Cmdline <C-C> <C-\><C-G>
|
||||||
Op-pending <C-C> <C-\><C-G>
|
Op-pending <C-C> <C-\><C-G>
|
||||||
|
|
||||||
Appending CTRL-\ CTRL-G is for going back to insert mode when 'insertmode' is
|
|
||||||
set. |CTRL-\_CTRL-G|
|
|
||||||
|
|
||||||
Example: >
|
Example: >
|
||||||
|
|
||||||
:amenu File.Next :next^M
|
:amenu File.Next :next^M
|
||||||
|
@@ -26,7 +26,7 @@ tag char action in Insert mode ~
|
|||||||
insert
|
insert
|
||||||
|i_CTRL-A| CTRL-A insert previously inserted text
|
|i_CTRL-A| CTRL-A insert previously inserted text
|
||||||
|i_CTRL-C| CTRL-C quit insert mode, without checking for
|
|i_CTRL-C| CTRL-C quit insert mode, without checking for
|
||||||
abbreviation, unless 'insertmode' set.
|
abbreviation
|
||||||
|i_CTRL-D| CTRL-D delete one shiftwidth of indent in the current
|
|i_CTRL-D| CTRL-D delete one shiftwidth of indent in the current
|
||||||
line
|
line
|
||||||
|i_CTRL-E| CTRL-E insert the character which is below the cursor
|
|i_CTRL-E| CTRL-E insert the character which is below the cursor
|
||||||
@@ -50,7 +50,6 @@ tag char action in Insert mode ~
|
|||||||
|i_CTRL-J| CTRL-J same as <CR>
|
|i_CTRL-J| CTRL-J same as <CR>
|
||||||
|i_CTRL-K| CTRL-K {char1} {char2}
|
|i_CTRL-K| CTRL-K {char1} {char2}
|
||||||
enter digraph
|
enter digraph
|
||||||
|i_CTRL-L| CTRL-L when 'insertmode' set: Leave Insert mode
|
|
||||||
|i_<CR>| <CR> begin new line
|
|i_<CR>| <CR> begin new line
|
||||||
|i_CTRL-M| CTRL-M same as <CR>
|
|i_CTRL-M| CTRL-M same as <CR>
|
||||||
|i_CTRL-N| CTRL-N find next match for keyword in front of the
|
|i_CTRL-N| CTRL-N find next match for keyword in front of the
|
||||||
@@ -86,11 +85,10 @@ tag char action in Insert mode ~
|
|||||||
|i_CTRL-W| CTRL-W delete word before the cursor
|
|i_CTRL-W| CTRL-W delete word before the cursor
|
||||||
|i_CTRL-X| CTRL-X {mode} enter CTRL-X sub mode, see |i_CTRL-X_index|
|
|i_CTRL-X| CTRL-X {mode} enter CTRL-X sub mode, see |i_CTRL-X_index|
|
||||||
|i_CTRL-Y| CTRL-Y insert the character which is above the cursor
|
|i_CTRL-Y| CTRL-Y insert the character which is above the cursor
|
||||||
|i_CTRL-Z| CTRL-Z when 'insertmode' set: suspend Vim
|
|i_<Esc>| <Esc> end insert mode
|
||||||
|i_<Esc>| <Esc> end insert mode (unless 'insertmode' set)
|
|
||||||
|i_CTRL-[| CTRL-[ same as <Esc>
|
|i_CTRL-[| CTRL-[ same as <Esc>
|
||||||
|i_CTRL-\_CTRL-N| CTRL-\ CTRL-N go to Normal mode
|
|i_CTRL-\_CTRL-N| CTRL-\ CTRL-N go to Normal mode
|
||||||
|i_CTRL-\_CTRL-G| CTRL-\ CTRL-G go to mode specified with 'insertmode'
|
|i_CTRL-\_CTRL-G| CTRL-\ CTRL-G go to Normal mode
|
||||||
CTRL-\ a - z reserved for extensions
|
CTRL-\ a - z reserved for extensions
|
||||||
CTRL-\ others not used
|
CTRL-\ others not used
|
||||||
|i_CTRL-]| CTRL-] trigger abbreviation
|
|i_CTRL-]| CTRL-] trigger abbreviation
|
||||||
@@ -221,7 +219,7 @@ tag char note action in Normal mode ~
|
|||||||
|CTRL-Z| CTRL-Z suspend program (or start new shell)
|
|CTRL-Z| CTRL-Z suspend program (or start new shell)
|
||||||
CTRL-[ <Esc> not used
|
CTRL-[ <Esc> not used
|
||||||
|CTRL-\_CTRL-N| CTRL-\ CTRL-N go to Normal mode (no-op)
|
|CTRL-\_CTRL-N| CTRL-\ CTRL-N go to Normal mode (no-op)
|
||||||
|CTRL-\_CTRL-G| CTRL-\ CTRL-G go to mode specified with 'insertmode'
|
|CTRL-\_CTRL-G| CTRL-\ CTRL-G go to Normal mode (no-op)
|
||||||
CTRL-\ a - z reserved for extensions
|
CTRL-\ a - z reserved for extensions
|
||||||
CTRL-\ others not used
|
CTRL-\ others not used
|
||||||
|CTRL-]| CTRL-] :ta to ident under cursor
|
|CTRL-]| CTRL-] :ta to ident under cursor
|
||||||
@@ -892,7 +890,7 @@ here are those that are different.
|
|||||||
tag command note action in Visual mode ~
|
tag command note action in Visual mode ~
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|v_CTRL-\_CTRL-N| CTRL-\ CTRL-N stop Visual mode
|
|v_CTRL-\_CTRL-N| CTRL-\ CTRL-N stop Visual mode
|
||||||
|v_CTRL-\_CTRL-G| CTRL-\ CTRL-G go to mode specified with 'insertmode'
|
|v_CTRL-\_CTRL-G| CTRL-\ CTRL-G go to Normal mode
|
||||||
|v_CTRL-A| CTRL-A 2 add N to number in highlighted text
|
|v_CTRL-A| CTRL-A 2 add N to number in highlighted text
|
||||||
|v_CTRL-C| CTRL-C stop Visual mode
|
|v_CTRL-C| CTRL-C stop Visual mode
|
||||||
|v_CTRL-G| CTRL-G toggle between Visual mode and Select mode
|
|v_CTRL-G| CTRL-G toggle between Visual mode and Select mode
|
||||||
@@ -1068,8 +1066,7 @@ tag command action in Command-line editing mode ~
|
|||||||
|c_<Esc>| <Esc> abandon command-line without executing it
|
|c_<Esc>| <Esc> abandon command-line without executing it
|
||||||
|c_CTRL-[| CTRL-[ same as <Esc>
|
|c_CTRL-[| CTRL-[ same as <Esc>
|
||||||
|c_CTRL-\_CTRL-N| CTRL-\ CTRL-N go to Normal mode, abandon command-line
|
|c_CTRL-\_CTRL-N| CTRL-\ CTRL-N go to Normal mode, abandon command-line
|
||||||
|c_CTRL-\_CTRL-G| CTRL-\ CTRL-G go to mode specified with 'insertmode',
|
|c_CTRL-\_CTRL-G| CTRL-\ CTRL-G go to Normal mode, abandon command-line
|
||||||
abandon command-line
|
|
||||||
CTRL-\ a - d reserved for extensions
|
CTRL-\ a - d reserved for extensions
|
||||||
|c_CTRL-\_e| CTRL-\ e {expr} replace the command line with the result of
|
|c_CTRL-\_e| CTRL-\ e {expr} replace the command line with the result of
|
||||||
{expr}
|
{expr}
|
||||||
|
@@ -32,9 +32,6 @@ If you are working in a special language mode when inserting text, see the
|
|||||||
'langmap' option, |'langmap'|, on how to avoid switching this mode on and off
|
'langmap' option, |'langmap'|, on how to avoid switching this mode on and off
|
||||||
all the time.
|
all the time.
|
||||||
|
|
||||||
If you have 'insertmode' set, <Esc> and a few other keys get another meaning.
|
|
||||||
See |'insertmode'|.
|
|
||||||
|
|
||||||
char action ~
|
char action ~
|
||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
*i_CTRL-[* *i_<Esc>*
|
*i_CTRL-[* *i_<Esc>*
|
||||||
@@ -335,9 +332,8 @@ that key is interpreted as in Insert mode.
|
|||||||
The following keys are special. They stop the current insert, do something,
|
The following keys are special. They stop the current insert, do something,
|
||||||
and then restart insertion. This means you can do something without getting
|
and then restart insertion. This means you can do something without getting
|
||||||
out of Insert mode. This is very handy if you prefer to use the Insert mode
|
out of Insert mode. This is very handy if you prefer to use the Insert mode
|
||||||
all the time, just like editors that don't have a separate Normal mode. You
|
all the time, just like editors that don't have a separate Normal mode. You
|
||||||
may also want to set the 'insertmode' option. You can use CTRL-O if you want
|
can use CTRL-O if you want to map a function key to a command.
|
||||||
to map a function key to a command.
|
|
||||||
|
|
||||||
The changes (inserted or deleted characters) before and after these keys can
|
The changes (inserted or deleted characters) before and after these keys can
|
||||||
be undone separately. Only the last change can be redone and always behaves
|
be undone separately. Only the last change can be redone and always behaves
|
||||||
@@ -378,7 +374,6 @@ CTRL-G CTRL-J cursor one line down, insert start column *i_CTRL-G_CTRL-J*
|
|||||||
<S-ScrollWheelRight> move window one page right *i_<S-ScrollWheelRight>*
|
<S-ScrollWheelRight> move window one page right *i_<S-ScrollWheelRight>*
|
||||||
CTRL-O execute one command, return to Insert mode *i_CTRL-O*
|
CTRL-O execute one command, return to Insert mode *i_CTRL-O*
|
||||||
CTRL-\ CTRL-O like CTRL-O but don't move the cursor *i_CTRL-\_CTRL-O*
|
CTRL-\ CTRL-O like CTRL-O but don't move the cursor *i_CTRL-\_CTRL-O*
|
||||||
CTRL-L when 'insertmode' is set: go to Normal mode *i_CTRL-L*
|
|
||||||
CTRL-G u break undo sequence, start new change *i_CTRL-G_u*
|
CTRL-G u break undo sequence, start new change *i_CTRL-G_u*
|
||||||
CTRL-G U don't break undo with next left/right cursor *i_CTRL-G_U*
|
CTRL-G U don't break undo with next left/right cursor *i_CTRL-G_U*
|
||||||
movement, if the cursor stays within the
|
movement, if the cursor stays within the
|
||||||
|
@@ -424,8 +424,7 @@ Vim has seven BASIC modes:
|
|||||||
*Normal* *Normal-mode* *command-mode*
|
*Normal* *Normal-mode* *command-mode*
|
||||||
Normal mode In Normal mode you can enter all the normal editor
|
Normal mode In Normal mode you can enter all the normal editor
|
||||||
commands. If you start the editor you are in this
|
commands. If you start the editor you are in this
|
||||||
mode (unless you have set the 'insertmode' option,
|
mode. This is also known as command mode.
|
||||||
see below). This is also known as command mode.
|
|
||||||
|
|
||||||
Visual mode This is like Normal mode, but the movement commands
|
Visual mode This is like Normal mode, but the movement commands
|
||||||
extend a highlighted area. When a non-movement
|
extend a highlighted area. When a non-movement
|
||||||
@@ -551,8 +550,6 @@ Ex :vi -- -- -- -- --
|
|||||||
*6 Go from Select mode to Insert mode by typing a printable character. The
|
*6 Go from Select mode to Insert mode by typing a printable character. The
|
||||||
selection is deleted and the character is inserted.
|
selection is deleted and the character is inserted.
|
||||||
|
|
||||||
If the 'insertmode' option is on, editing a file will start in Insert mode.
|
|
||||||
|
|
||||||
*CTRL-\_CTRL-N* *i_CTRL-\_CTRL-N* *c_CTRL-\_CTRL-N* *v_CTRL-\_CTRL-N*
|
*CTRL-\_CTRL-N* *i_CTRL-\_CTRL-N* *c_CTRL-\_CTRL-N* *v_CTRL-\_CTRL-N*
|
||||||
Additionally the command CTRL-\ CTRL-N or <C-\><C-N> can be used to go to
|
Additionally the command CTRL-\ CTRL-N or <C-\><C-N> can be used to go to
|
||||||
Normal mode from any other mode. This can be used to make sure Vim is in
|
Normal mode from any other mode. This can be used to make sure Vim is in
|
||||||
@@ -561,10 +558,7 @@ work in Ex mode. When used after a command that takes an argument, such as
|
|||||||
|f| or |m|, the timeout set with 'ttimeoutlen' applies.
|
|f| or |m|, the timeout set with 'ttimeoutlen' applies.
|
||||||
|
|
||||||
*CTRL-\_CTRL-G* *i_CTRL-\_CTRL-G* *c_CTRL-\_CTRL-G* *v_CTRL-\_CTRL-G*
|
*CTRL-\_CTRL-G* *i_CTRL-\_CTRL-G* *c_CTRL-\_CTRL-G* *v_CTRL-\_CTRL-G*
|
||||||
The command CTRL-\ CTRL-G or <C-\><C-G> can be used to go to Insert mode when
|
CTRL-\ CTRL-G works the same as |CTRL-\_CTRL-N| for backward compatibility.
|
||||||
'insertmode' is set. Otherwise it goes to Normal mode. This can be used to
|
|
||||||
make sure Vim is in the mode indicated by 'insertmode', without knowing in
|
|
||||||
what mode Vim currently is.
|
|
||||||
|
|
||||||
*gQ* *mode-Ex* *Ex-mode* *Ex* *EX* *E501*
|
*gQ* *mode-Ex* *Ex-mode* *Ex* *EX* *E501*
|
||||||
gQ Switch to Ex mode. This is like typing ":" commands
|
gQ Switch to Ex mode. This is like typing ":" commands
|
||||||
|
@@ -959,7 +959,6 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
(mostly used in |Normal-mode| or |Cmdline-mode|).
|
(mostly used in |Normal-mode| or |Cmdline-mode|).
|
||||||
esc hitting <Esc> in |Normal-mode|.
|
esc hitting <Esc> in |Normal-mode|.
|
||||||
hangul Ignored.
|
hangul Ignored.
|
||||||
insertmode Pressing <Esc> in 'insertmode'.
|
|
||||||
lang Calling the beep module for Lua/Mzscheme/TCL.
|
lang Calling the beep module for Lua/Mzscheme/TCL.
|
||||||
mess No output available for |g<|.
|
mess No output available for |g<|.
|
||||||
showmatch Error occurred for 'showmatch' function.
|
showmatch Error occurred for 'showmatch' function.
|
||||||
@@ -3412,31 +3411,6 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
and there is a letter before it, the completed part is made uppercase.
|
and there is a letter before it, the completed part is made uppercase.
|
||||||
With 'noinfercase' the match is used as-is.
|
With 'noinfercase' the match is used as-is.
|
||||||
|
|
||||||
*'insertmode'* *'im'* *'noinsertmode'* *'noim'*
|
|
||||||
'insertmode' 'im' boolean (default off)
|
|
||||||
global
|
|
||||||
Makes Vim work in a way that Insert mode is the default mode. Useful
|
|
||||||
if you want to use Vim as a modeless editor.
|
|
||||||
These Insert mode commands will be useful:
|
|
||||||
- Use the cursor keys to move around.
|
|
||||||
- Use CTRL-O to execute one Normal mode command |i_CTRL-O|. When
|
|
||||||
this is a mapping, it is executed as if 'insertmode' was off.
|
|
||||||
Normal mode remains active until the mapping is finished.
|
|
||||||
- Use CTRL-L to execute a number of Normal mode commands, then use
|
|
||||||
<Esc> to get back to Insert mode. Note that CTRL-L moves the cursor
|
|
||||||
left, like <Esc> does when 'insertmode' isn't set. |i_CTRL-L|
|
|
||||||
|
|
||||||
These items change when 'insertmode' is set:
|
|
||||||
- when starting to edit of a file, Vim goes to Insert mode.
|
|
||||||
- <Esc> in Insert mode is a no-op and beeps.
|
|
||||||
- <Esc> in Normal mode makes Vim go to Insert mode.
|
|
||||||
- CTRL-L in Insert mode is a command, it is not inserted.
|
|
||||||
- CTRL-Z in Insert mode suspends Vim, see |CTRL-Z|. *i_CTRL-Z*
|
|
||||||
However, when <Esc> is used inside a mapping, it behaves like
|
|
||||||
'insertmode' was not set. This was done to be able to use the same
|
|
||||||
mappings with 'insertmode' set or not set.
|
|
||||||
When executing commands with |:normal| 'insertmode' is not used.
|
|
||||||
|
|
||||||
*'isfname'* *'isf'*
|
*'isfname'* *'isf'*
|
||||||
'isfname' 'isf' string (default for Windows:
|
'isfname' 'isf' string (default for Windows:
|
||||||
"@,48-57,/,\,.,-,_,+,,,#,$,%,{,},[,],:,@-@,!,~,="
|
"@,48-57,/,\,.,-,_,+,,,#,$,%,{,},[,],:,@-@,!,~,="
|
||||||
|
@@ -741,7 +741,6 @@ Short explanation of each option: *option-list*
|
|||||||
'indentexpr' 'inde' expression used to obtain the indent of a line
|
'indentexpr' 'inde' expression used to obtain the indent of a line
|
||||||
'indentkeys' 'indk' keys that trigger indenting with 'indentexpr'
|
'indentkeys' 'indk' keys that trigger indenting with 'indentexpr'
|
||||||
'infercase' 'inf' adjust case of match for keyword completion
|
'infercase' 'inf' adjust case of match for keyword completion
|
||||||
'insertmode' 'im' start the edit of a file in Insert mode
|
|
||||||
'isfname' 'isf' characters included in file names and pathnames
|
'isfname' 'isf' characters included in file names and pathnames
|
||||||
'isident' 'isi' characters included in identifiers
|
'isident' 'isi' characters included in identifiers
|
||||||
'iskeyword' 'isk' characters included in keywords
|
'iskeyword' 'isk' characters included in keywords
|
||||||
|
@@ -527,7 +527,6 @@ accordingly, proceeding as follows:
|
|||||||
16. Execute startup commands
|
16. Execute startup commands
|
||||||
If a |-t| flag was given, the tag is jumped to.
|
If a |-t| flag was given, the tag is jumped to.
|
||||||
Commands given with |-c| and |+cmd| are executed.
|
Commands given with |-c| and |+cmd| are executed.
|
||||||
If the 'insertmode' option is set, Insert mode is entered.
|
|
||||||
The starting flag is reset, has("vim_starting") will now return zero.
|
The starting flag is reset, has("vim_starting") will now return zero.
|
||||||
The |v:vim_did_enter| variable is set to 1.
|
The |v:vim_did_enter| variable is set to 1.
|
||||||
The |VimEnter| autocommands are executed.
|
The |VimEnter| autocommands are executed.
|
||||||
|
@@ -208,8 +208,6 @@ g8 Print the hex values of the bytes used in the
|
|||||||
{commands} cannot start with a space. Put a count of
|
{commands} cannot start with a space. Put a count of
|
||||||
1 (one) before it, "1 " is one space.
|
1 (one) before it, "1 " is one space.
|
||||||
|
|
||||||
The 'insertmode' option is ignored for {commands}.
|
|
||||||
|
|
||||||
This command cannot be followed by another command,
|
This command cannot be followed by another command,
|
||||||
since any '|' is considered part of the command.
|
since any '|' is considered part of the command.
|
||||||
|
|
||||||
|
@@ -543,6 +543,13 @@ Options:
|
|||||||
*'imactivatefunc'* *'imaf'*
|
*'imactivatefunc'* *'imaf'*
|
||||||
*'imactivatekey'* *'imak'*
|
*'imactivatekey'* *'imak'*
|
||||||
*'imstatusfunc'* *'imsf'*
|
*'imstatusfunc'* *'imsf'*
|
||||||
|
*'insertmode'* *'im'* Use the following script to emulate 'insertmode':
|
||||||
|
>
|
||||||
|
autocmd VimEnter,CmdlineLeave,WinEnter,WinScrolled,BufEnter * silent! if &modifiable | startinsert | endif
|
||||||
|
inoremap <Esc> <Nop>
|
||||||
|
inoremap <C-L> <Esc>
|
||||||
|
nnoremap <Esc> i
|
||||||
|
<
|
||||||
*'macatsui'*
|
*'macatsui'*
|
||||||
'maxmem' Nvim delegates memory-management to the OS.
|
'maxmem' Nvim delegates memory-management to the OS.
|
||||||
'maxmemtot' Nvim delegates memory-management to the OS.
|
'maxmemtot' Nvim delegates memory-management to the OS.
|
||||||
|
@@ -229,8 +229,6 @@ call append("$", "compatible\tbehave very Vi compatible (not advisable)")
|
|||||||
call <SID>BinOptionG("cp", &cp)
|
call <SID>BinOptionG("cp", &cp)
|
||||||
call append("$", "cpoptions\tlist of flags to specify Vi compatibility")
|
call append("$", "cpoptions\tlist of flags to specify Vi compatibility")
|
||||||
call <SID>OptionG("cpo", &cpo)
|
call <SID>OptionG("cpo", &cpo)
|
||||||
call append("$", "insertmode\tuse Insert mode as the default mode")
|
|
||||||
call <SID>BinOptionG("im", &im)
|
|
||||||
call append("$", "paste\tpaste mode, insert typed text literally")
|
call append("$", "paste\tpaste mode, insert typed text literally")
|
||||||
call <SID>BinOptionG("paste", &paste)
|
call <SID>BinOptionG("paste", &paste)
|
||||||
call append("$", "pastetoggle\tkey sequence to toggle paste mode")
|
call append("$", "pastetoggle\tkey sequence to toggle paste mode")
|
||||||
|
@@ -459,9 +459,8 @@ static void insert_enter(InsertState *s)
|
|||||||
|
|
||||||
where_paste_started.lnum = 0;
|
where_paste_started.lnum = 0;
|
||||||
can_cindent = true;
|
can_cindent = true;
|
||||||
// The cursor line is not in a closed fold, unless 'insertmode' is set or
|
// The cursor line is not in a closed fold, unless restarting.
|
||||||
// restarting.
|
if (did_restart_edit == 0) {
|
||||||
if (!p_im && did_restart_edit == 0) {
|
|
||||||
foldOpenCursor();
|
foldOpenCursor();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -473,7 +472,7 @@ static void insert_enter(InsertState *s)
|
|||||||
s->i = showmode();
|
s->i = showmode();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!p_im && did_restart_edit == 0) {
|
if (did_restart_edit == 0) {
|
||||||
change_warning(curbuf, s->i == 0 ? 0 : s->i + 1);
|
change_warning(curbuf, s->i == 0 ? 0 : s->i + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -554,7 +553,7 @@ static int insert_check(VimState *state)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (stop_insert_mode && !compl_started) {
|
if (stop_insert_mode && !compl_started) {
|
||||||
// ":stopinsert" used or 'insertmode' reset
|
// ":stopinsert" used
|
||||||
s->count = 0;
|
s->count = 0;
|
||||||
return 0; // exit insert mode
|
return 0; // exit insert mode
|
||||||
}
|
}
|
||||||
@@ -756,7 +755,6 @@ static int insert_execute(VimState *state, int key)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CTRL-\ CTRL-N goes to Normal mode,
|
// CTRL-\ CTRL-N goes to Normal mode,
|
||||||
// CTRL-\ CTRL-G goes to mode selected with 'insertmode',
|
|
||||||
// CTRL-\ CTRL-O is like CTRL-O but without moving the cursor
|
// CTRL-\ CTRL-O is like CTRL-O but without moving the cursor
|
||||||
if (s->c == Ctrl_BSL) {
|
if (s->c == Ctrl_BSL) {
|
||||||
// may need to redraw when no more chars available now
|
// may need to redraw when no more chars available now
|
||||||
@@ -770,8 +768,6 @@ static int insert_execute(VimState *state, int key)
|
|||||||
// it's something else
|
// it's something else
|
||||||
vungetc(s->c);
|
vungetc(s->c);
|
||||||
s->c = Ctrl_BSL;
|
s->c = Ctrl_BSL;
|
||||||
} else if (s->c == Ctrl_G && p_im) {
|
|
||||||
return 1; // continue
|
|
||||||
} else {
|
} else {
|
||||||
if (s->c == Ctrl_O) {
|
if (s->c == Ctrl_O) {
|
||||||
ins_ctrl_o();
|
ins_ctrl_o();
|
||||||
@@ -843,16 +839,6 @@ static int insert_execute(VimState *state, int key)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// Return true when need to go to Insert mode because of 'insertmode'.
|
|
||||||
///
|
|
||||||
/// Don't do this when still processing a command or a mapping.
|
|
||||||
/// Don't do this when inside a ":normal" command.
|
|
||||||
bool goto_im(void)
|
|
||||||
FUNC_ATTR_PURE
|
|
||||||
{
|
|
||||||
return p_im && stuff_empty() && typebuf_typed();
|
|
||||||
}
|
|
||||||
|
|
||||||
static int insert_handle_key(InsertState *s)
|
static int insert_handle_key(InsertState *s)
|
||||||
{
|
{
|
||||||
// The big switch to handle a character in insert mode.
|
// The big switch to handle a character in insert mode.
|
||||||
@@ -884,26 +870,10 @@ static int insert_handle_key(InsertState *s)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// when 'insertmode' set, and not halfway through a mapping, don't leave
|
|
||||||
// Insert mode
|
|
||||||
if (goto_im()) {
|
|
||||||
if (got_int) {
|
|
||||||
(void)vgetc(); // flush all buffers
|
|
||||||
got_int = false;
|
|
||||||
} else {
|
|
||||||
vim_beep(BO_IM);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return 0; // exit insert mode
|
return 0; // exit insert mode
|
||||||
|
|
||||||
case Ctrl_Z: // suspend when 'insertmode' set
|
case Ctrl_Z:
|
||||||
if (!p_im) {
|
goto normalchar; // insert CTRL-Z as normal char
|
||||||
goto normalchar; // insert CTRL-Z as normal char
|
|
||||||
}
|
|
||||||
do_cmdline_cmd("stop");
|
|
||||||
ui_cursor_shape(); // may need to update cursor shape
|
|
||||||
break;
|
|
||||||
|
|
||||||
case Ctrl_O: // execute one command
|
case Ctrl_O: // execute one command
|
||||||
if (ctrl_x_mode == CTRL_X_OMNI) {
|
if (ctrl_x_mode == CTRL_X_OMNI) {
|
||||||
@@ -939,9 +909,6 @@ static int insert_handle_key(InsertState *s)
|
|||||||
case K_F1:
|
case K_F1:
|
||||||
case K_XF1:
|
case K_XF1:
|
||||||
stuffcharReadbuff(K_HELP);
|
stuffcharReadbuff(K_HELP);
|
||||||
if (p_im) {
|
|
||||||
need_start_insertmode = true;
|
|
||||||
}
|
|
||||||
return 0; // exit insert mode
|
return 0; // exit insert mode
|
||||||
|
|
||||||
|
|
||||||
@@ -956,7 +923,7 @@ static int insert_handle_key(InsertState *s)
|
|||||||
// For ^@ the trailing ESC will end the insert, unless there is an
|
// For ^@ the trailing ESC will end the insert, unless there is an
|
||||||
// error.
|
// error.
|
||||||
if (stuff_inserted(NUL, 1L, (s->c == Ctrl_A)) == FAIL
|
if (stuff_inserted(NUL, 1L, (s->c == Ctrl_A)) == FAIL
|
||||||
&& s->c != Ctrl_A && !p_im) {
|
&& s->c != Ctrl_A) {
|
||||||
return 0; // exit insert mode
|
return 0; // exit insert mode
|
||||||
}
|
}
|
||||||
s->inserted_space = false;
|
s->inserted_space = false;
|
||||||
@@ -1236,7 +1203,7 @@ check_pum:
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (!ins_eol(s->c) && !p_im) {
|
if (!ins_eol(s->c)) {
|
||||||
return 0; // out of memory
|
return 0; // out of memory
|
||||||
}
|
}
|
||||||
auto_format(false, false);
|
auto_format(false, false);
|
||||||
@@ -1288,13 +1255,6 @@ check_pum:
|
|||||||
|
|
||||||
case Ctrl_L: // Whole line completion after ^X
|
case Ctrl_L: // Whole line completion after ^X
|
||||||
if (ctrl_x_mode != CTRL_X_WHOLE_LINE) {
|
if (ctrl_x_mode != CTRL_X_WHOLE_LINE) {
|
||||||
// CTRL-L with 'insertmode' set: Leave Insert mode
|
|
||||||
if (p_im) {
|
|
||||||
if (echeck_abbr(Ctrl_L + ABBR_OFF)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return 0; // exit insert mode
|
|
||||||
}
|
|
||||||
goto normalchar;
|
goto normalchar;
|
||||||
}
|
}
|
||||||
FALLTHROUGH;
|
FALLTHROUGH;
|
||||||
@@ -7964,10 +7924,8 @@ static bool ins_esc(long *count, int cmdchar, bool nomove)
|
|||||||
}
|
}
|
||||||
if (!arrow_used) {
|
if (!arrow_used) {
|
||||||
// Don't append the ESC for "r<CR>" and "grx".
|
// Don't append the ESC for "r<CR>" and "grx".
|
||||||
// When 'insertmode' is set only CTRL-L stops Insert mode. Needed for
|
|
||||||
// when "count" is non-zero.
|
|
||||||
if (cmdchar != 'r' && cmdchar != 'v') {
|
if (cmdchar != 'r' && cmdchar != 'v') {
|
||||||
AppendToRedobuff(p_im ? "\014" : ESC_STR);
|
AppendToRedobuff(ESC_STR);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -2880,10 +2880,6 @@ int do_ecmd(int fnum, char *ffname, char *sfname, exarg_T *eap, linenr_T newlnum
|
|||||||
redraw_curbuf_later(NOT_VALID); // redraw this buffer later
|
redraw_curbuf_later(NOT_VALID); // redraw this buffer later
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p_im && (State & MODE_INSERT) == 0) {
|
|
||||||
need_start_insertmode = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Change directories when the 'acd' option is set.
|
// Change directories when the 'acd' option is set.
|
||||||
do_autochdir();
|
do_autochdir();
|
||||||
|
|
||||||
@@ -4909,9 +4905,8 @@ void ex_help(exarg_T *eap)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!p_im) {
|
restart_edit = 0; // don't want insert mode in help file
|
||||||
restart_edit = 0; // don't want insert mode in help file
|
|
||||||
}
|
|
||||||
// Restore KeyTyped, setting 'filetype=help' may reset it.
|
// Restore KeyTyped, setting 'filetype=help' may reset it.
|
||||||
// It is needed for do_tag top open folds under the cursor.
|
// It is needed for do_tag top open folds under the cursor.
|
||||||
KeyTyped = old_KeyTyped;
|
KeyTyped = old_KeyTyped;
|
||||||
|
@@ -8979,7 +8979,6 @@ bool save_current_state(save_state_T *sst)
|
|||||||
sst->save_restart_edit = restart_edit;
|
sst->save_restart_edit = restart_edit;
|
||||||
sst->save_msg_didout = msg_didout;
|
sst->save_msg_didout = msg_didout;
|
||||||
sst->save_State = State;
|
sst->save_State = State;
|
||||||
sst->save_insertmode = p_im;
|
|
||||||
sst->save_finish_op = finish_op;
|
sst->save_finish_op = finish_op;
|
||||||
sst->save_opcount = opcount;
|
sst->save_opcount = opcount;
|
||||||
sst->save_reg_executing = reg_executing;
|
sst->save_reg_executing = reg_executing;
|
||||||
@@ -8987,7 +8986,6 @@ bool save_current_state(save_state_T *sst)
|
|||||||
|
|
||||||
msg_scroll = false; // no msg scrolling in Normal mode
|
msg_scroll = false; // no msg scrolling in Normal mode
|
||||||
restart_edit = 0; // don't go to Insert mode
|
restart_edit = 0; // don't go to Insert mode
|
||||||
p_im = false; // don't use 'insertmode
|
|
||||||
|
|
||||||
// Save the current typeahead. This is required to allow using ":normal"
|
// Save the current typeahead. This is required to allow using ":normal"
|
||||||
// from an event handler and makes sure we don't hang when the argument
|
// from an event handler and makes sure we don't hang when the argument
|
||||||
@@ -9010,7 +9008,6 @@ void restore_current_state(save_state_T *sst)
|
|||||||
// override the value of restart_edit anyway.
|
// override the value of restart_edit anyway.
|
||||||
restart_edit = sst->save_restart_edit;
|
restart_edit = sst->save_restart_edit;
|
||||||
}
|
}
|
||||||
p_im = sst->save_insertmode;
|
|
||||||
finish_op = sst->save_finish_op;
|
finish_op = sst->save_finish_op;
|
||||||
opcount = sst->save_opcount;
|
opcount = sst->save_opcount;
|
||||||
reg_executing = sst->save_reg_executing;
|
reg_executing = sst->save_reg_executing;
|
||||||
|
@@ -25,7 +25,6 @@ typedef struct {
|
|||||||
int save_restart_edit;
|
int save_restart_edit;
|
||||||
bool save_msg_didout;
|
bool save_msg_didout;
|
||||||
int save_State;
|
int save_State;
|
||||||
int save_insertmode;
|
|
||||||
bool save_finish_op;
|
bool save_finish_op;
|
||||||
long save_opcount;
|
long save_opcount;
|
||||||
int save_reg_executing;
|
int save_reg_executing;
|
||||||
|
@@ -1336,8 +1336,7 @@ static int command_line_execute(VimState *state, int key)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// CTRL-\ CTRL-N goes to Normal mode, CTRL-\ CTRL-G goes to Insert
|
// CTRL-\ CTRL-N goes to Normal mode, CTRL-\ e prompts for an expression.
|
||||||
// mode when 'insertmode' is set, CTRL-\ e prompts for an expression.
|
|
||||||
if (s->c == Ctrl_BSL) {
|
if (s->c == Ctrl_BSL) {
|
||||||
no_mapping++;
|
no_mapping++;
|
||||||
allow_keys++;
|
allow_keys++;
|
||||||
@@ -1399,9 +1398,6 @@ static int command_line_execute(VimState *state, int key)
|
|||||||
redrawcmd();
|
redrawcmd();
|
||||||
return command_line_not_changed(s);
|
return command_line_not_changed(s);
|
||||||
} else {
|
} else {
|
||||||
if (s->c == Ctrl_G && p_im && restart_edit == 0) {
|
|
||||||
restart_edit = 'a';
|
|
||||||
}
|
|
||||||
s->gotesc = true; // will free ccline.cmdbuff after putting it
|
s->gotesc = true; // will free ccline.cmdbuff after putting it
|
||||||
// in history
|
// in history
|
||||||
return 0; // back to Normal mode
|
return 0; // back to Normal mode
|
||||||
|
@@ -1352,14 +1352,12 @@ void openscript(char_u *name, bool directly)
|
|||||||
int oldcurscript;
|
int oldcurscript;
|
||||||
int save_State = State;
|
int save_State = State;
|
||||||
int save_restart_edit = restart_edit;
|
int save_restart_edit = restart_edit;
|
||||||
int save_insertmode = p_im;
|
|
||||||
int save_finish_op = finish_op;
|
int save_finish_op = finish_op;
|
||||||
int save_msg_scroll = msg_scroll;
|
int save_msg_scroll = msg_scroll;
|
||||||
|
|
||||||
State = MODE_NORMAL;
|
State = MODE_NORMAL;
|
||||||
msg_scroll = false; // no msg scrolling in Normal mode
|
msg_scroll = false; // no msg scrolling in Normal mode
|
||||||
restart_edit = 0; // don't go to Insert mode
|
restart_edit = 0; // don't go to Insert mode
|
||||||
p_im = false; // don't use 'insertmode'
|
|
||||||
clear_oparg(&oa);
|
clear_oparg(&oa);
|
||||||
finish_op = false;
|
finish_op = false;
|
||||||
|
|
||||||
@@ -1373,7 +1371,6 @@ void openscript(char_u *name, bool directly)
|
|||||||
State = save_State;
|
State = save_State;
|
||||||
msg_scroll = save_msg_scroll;
|
msg_scroll = save_msg_scroll;
|
||||||
restart_edit = save_restart_edit;
|
restart_edit = save_restart_edit;
|
||||||
p_im = save_insertmode;
|
|
||||||
finish_op = save_finish_op;
|
finish_op = save_finish_op;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2513,16 +2510,12 @@ static int vgetorpeek(bool advance)
|
|||||||
timedout = true;
|
timedout = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// When 'insertmode' is set, ESC just beeps in Insert
|
|
||||||
// mode. Use CTRL-L to make edit() return.
|
|
||||||
// In Ex-mode \n is compatible with original Vim behaviour.
|
// In Ex-mode \n is compatible with original Vim behaviour.
|
||||||
// For the command line only CTRL-C always breaks it.
|
// For the command line only CTRL-C always breaks it.
|
||||||
// For the cmdline window: Alternate between ESC and
|
// For the cmdline window: Alternate between ESC and
|
||||||
// CTRL-C: ESC for most situations and CTRL-C to close the
|
// CTRL-C: ESC for most situations and CTRL-C to close the
|
||||||
// cmdline window.
|
// cmdline window.
|
||||||
if (p_im && (State & MODE_INSERT)) {
|
if ((State & MODE_CMDLINE) || (cmdwin_type > 0 && tc == ESC)) {
|
||||||
c = Ctrl_L;
|
|
||||||
} else if ((State & MODE_CMDLINE) || (cmdwin_type > 0 && tc == ESC)) {
|
|
||||||
c = Ctrl_C;
|
c = Ctrl_C;
|
||||||
} else {
|
} else {
|
||||||
c = ESC;
|
c = ESC;
|
||||||
|
@@ -530,11 +530,6 @@ int main(int argc, char **argv)
|
|||||||
// 'autochdir' has been postponed.
|
// 'autochdir' has been postponed.
|
||||||
do_autochdir();
|
do_autochdir();
|
||||||
|
|
||||||
// start in insert mode
|
|
||||||
if (p_im) {
|
|
||||||
need_start_insertmode = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
set_vim_var_nr(VV_VIM_DID_ENTER, 1L);
|
set_vim_var_nr(VV_VIM_DID_ENTER, 1L);
|
||||||
apply_autocmds(EVENT_VIMENTER, NULL, NULL, false, curbuf);
|
apply_autocmds(EVENT_VIMENTER, NULL, NULL, false, curbuf);
|
||||||
TIME_MSG("VimEnter autocommands");
|
TIME_MSG("VimEnter autocommands");
|
||||||
|
@@ -1126,9 +1126,6 @@ static int normal_execute(VimState *state, int key)
|
|||||||
|
|
||||||
if (s->ca.nchar == ESC) {
|
if (s->ca.nchar == ESC) {
|
||||||
clearop(&s->oa);
|
clearop(&s->oa);
|
||||||
if (restart_edit == 0 && goto_im()) {
|
|
||||||
restart_edit = 'a';
|
|
||||||
}
|
|
||||||
s->command_finished = true;
|
s->command_finished = true;
|
||||||
goto finish;
|
goto finish;
|
||||||
}
|
}
|
||||||
@@ -1178,14 +1175,6 @@ static void normal_check_stuff_buffer(NormalState *s)
|
|||||||
// if wait_return still needed call it now
|
// if wait_return still needed call it now
|
||||||
wait_return(false);
|
wait_return(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (need_start_insertmode && goto_im() && !VIsual_active) {
|
|
||||||
need_start_insertmode = false;
|
|
||||||
stuffReadbuff("i"); // start insert mode next
|
|
||||||
// skip the fileinfo message now, because it would be shown
|
|
||||||
// after insert mode finishes!
|
|
||||||
need_fileinfo = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3904,7 +3893,6 @@ static void nv_regreplay(cmdarg_T *cap)
|
|||||||
/// Handle a ":" command and <Cmd> or Lua keymaps.
|
/// Handle a ":" command and <Cmd> or Lua keymaps.
|
||||||
static void nv_colon(cmdarg_T *cap)
|
static void nv_colon(cmdarg_T *cap)
|
||||||
{
|
{
|
||||||
int old_p_im;
|
|
||||||
bool cmd_result;
|
bool cmd_result;
|
||||||
bool is_cmdkey = cap->cmdchar == K_COMMAND;
|
bool is_cmdkey = cap->cmdchar == K_COMMAND;
|
||||||
bool is_lua = cap->cmdchar == K_LUA;
|
bool is_lua = cap->cmdchar == K_LUA;
|
||||||
@@ -3930,8 +3918,6 @@ static void nv_colon(cmdarg_T *cap)
|
|||||||
compute_cmdrow();
|
compute_cmdrow();
|
||||||
}
|
}
|
||||||
|
|
||||||
old_p_im = p_im;
|
|
||||||
|
|
||||||
if (is_lua) {
|
if (is_lua) {
|
||||||
cmd_result = map_execute_lua();
|
cmd_result = map_execute_lua();
|
||||||
} else {
|
} else {
|
||||||
@@ -3940,15 +3926,6 @@ static void nv_colon(cmdarg_T *cap)
|
|||||||
cap->oap->op_type != OP_NOP ? DOCMD_KEEPLINE : 0);
|
cap->oap->op_type != OP_NOP ? DOCMD_KEEPLINE : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// If 'insertmode' changed, enter or exit Insert mode
|
|
||||||
if (p_im != old_p_im) {
|
|
||||||
if (p_im) {
|
|
||||||
restart_edit = 'i';
|
|
||||||
} else {
|
|
||||||
restart_edit = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cmd_result == false) {
|
if (cmd_result == false) {
|
||||||
// The Ex command failed, do not execute the operator.
|
// The Ex command failed, do not execute the operator.
|
||||||
clearop(cap->oap);
|
clearop(cap->oap);
|
||||||
@@ -6735,10 +6712,6 @@ static void nv_normal(cmdarg_T *cap)
|
|||||||
end_visual_mode(); // stop Visual
|
end_visual_mode(); // stop Visual
|
||||||
redraw_curbuf_later(INVERTED);
|
redraw_curbuf_later(INVERTED);
|
||||||
}
|
}
|
||||||
// CTRL-\ CTRL-G restarts Insert mode when 'insertmode' is set.
|
|
||||||
if (cap->nchar == Ctrl_G && p_im) {
|
|
||||||
restart_edit = 'a';
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
clearopbeep(cap->oap);
|
clearopbeep(cap->oap);
|
||||||
}
|
}
|
||||||
@@ -6753,8 +6726,7 @@ static void nv_esc(cmdarg_T *cap)
|
|||||||
no_reason = (cap->oap->op_type == OP_NOP
|
no_reason = (cap->oap->op_type == OP_NOP
|
||||||
&& cap->opcount == 0
|
&& cap->opcount == 0
|
||||||
&& cap->count0 == 0
|
&& cap->count0 == 0
|
||||||
&& cap->oap->regname == 0
|
&& cap->oap->regname == 0);
|
||||||
&& !p_im);
|
|
||||||
|
|
||||||
if (cap->arg) { // true for CTRL-C
|
if (cap->arg) { // true for CTRL-C
|
||||||
if (restart_edit == 0
|
if (restart_edit == 0
|
||||||
@@ -6771,9 +6743,8 @@ static void nv_esc(cmdarg_T *cap)
|
|||||||
|
|
||||||
// Don't reset "restart_edit" when 'insertmode' is set, it won't be
|
// Don't reset "restart_edit" when 'insertmode' is set, it won't be
|
||||||
// set again below when halfway through a mapping.
|
// set again below when halfway through a mapping.
|
||||||
if (!p_im) {
|
restart_edit = 0;
|
||||||
restart_edit = 0;
|
|
||||||
}
|
|
||||||
if (cmdwin_type != 0) {
|
if (cmdwin_type != 0) {
|
||||||
cmdwin_result = K_IGNORE;
|
cmdwin_result = K_IGNORE;
|
||||||
got_int = false; // don't stop executing autocommands et al.
|
got_int = false; // don't stop executing autocommands et al.
|
||||||
@@ -6796,13 +6767,6 @@ static void nv_esc(cmdarg_T *cap)
|
|||||||
vim_beep(BO_ESC);
|
vim_beep(BO_ESC);
|
||||||
}
|
}
|
||||||
clearop(cap->oap);
|
clearop(cap->oap);
|
||||||
|
|
||||||
// A CTRL-C is often used at the start of a menu. When 'insertmode' is
|
|
||||||
// set return to Insert mode afterwards.
|
|
||||||
if (restart_edit == 0 && goto_im()
|
|
||||||
&& ex_normal_busy == 0) {
|
|
||||||
restart_edit = 'a';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Move the cursor for the "A" command.
|
// Move the cursor for the "A" command.
|
||||||
@@ -6837,8 +6801,7 @@ static void nv_edit(cmdarg_T *cap)
|
|||||||
} else if ((cap->cmdchar == 'a' || cap->cmdchar == 'i')
|
} else if ((cap->cmdchar == 'a' || cap->cmdchar == 'i')
|
||||||
&& (cap->oap->op_type != OP_NOP || VIsual_active)) {
|
&& (cap->oap->op_type != OP_NOP || VIsual_active)) {
|
||||||
nv_object(cap);
|
nv_object(cap);
|
||||||
} else if (!curbuf->b_p_ma && !p_im && !curbuf->terminal) {
|
} else if (!curbuf->b_p_ma && !curbuf->terminal) {
|
||||||
// Only give this error when 'insertmode' is off.
|
|
||||||
emsg(_(e_modifiable));
|
emsg(_(e_modifiable));
|
||||||
clearop(cap->oap);
|
clearop(cap->oap);
|
||||||
} else if (!checkclearopq(cap->oap)) {
|
} else if (!checkclearopq(cap->oap)) {
|
||||||
|
@@ -6719,7 +6719,7 @@ void do_pending_operator(cmdarg_T *cap, int old_col, bool gui_yank)
|
|||||||
// remember it to make 'insertmode' work with mappings for
|
// remember it to make 'insertmode' work with mappings for
|
||||||
// Visual mode. But do this only once and not when typed and
|
// Visual mode. But do this only once and not when typed and
|
||||||
// 'insertmode' isn't set.
|
// 'insertmode' isn't set.
|
||||||
if (p_im || !KeyTyped) {
|
if (!KeyTyped) {
|
||||||
restart_edit_save = restart_edit;
|
restart_edit_save = restart_edit;
|
||||||
} else {
|
} else {
|
||||||
restart_edit_save = 0;
|
restart_edit_save = 0;
|
||||||
|
@@ -4052,21 +4052,6 @@ static char *set_bool_option(const int opt_idx, char_u *const varp, const int va
|
|||||||
} else if ((int *)varp == &p_paste) {
|
} else if ((int *)varp == &p_paste) {
|
||||||
// when 'paste' is set or reset also change other options
|
// when 'paste' is set or reset also change other options
|
||||||
paste_option_changed();
|
paste_option_changed();
|
||||||
} else if ((int *)varp == &p_im) {
|
|
||||||
// when 'insertmode' is set from an autocommand need to do work here
|
|
||||||
if (p_im) {
|
|
||||||
if ((State & MODE_INSERT) == 0) {
|
|
||||||
need_start_insertmode = true;
|
|
||||||
}
|
|
||||||
stop_insert_mode = false;
|
|
||||||
} else if (old_value) { // only reset if it was set previously
|
|
||||||
need_start_insertmode = false;
|
|
||||||
stop_insert_mode = true;
|
|
||||||
if (restart_edit != 0 && mode_displayed) {
|
|
||||||
clear_cmdline = true; // remove "(insert)"
|
|
||||||
}
|
|
||||||
restart_edit = 0;
|
|
||||||
}
|
|
||||||
} else if ((int *)varp == &p_ic && p_hls) {
|
} else if ((int *)varp == &p_ic && p_hls) {
|
||||||
// when 'ignorecase' is set or reset and 'hlsearch' is set, redraw
|
// when 'ignorecase' is set or reset and 'hlsearch' is set, redraw
|
||||||
redraw_all_later(SOME_VALID);
|
redraw_all_later(SOME_VALID);
|
||||||
|
@@ -334,9 +334,9 @@ EXTERN unsigned bo_flags;
|
|||||||
#ifdef IN_OPTION_C
|
#ifdef IN_OPTION_C
|
||||||
static char *(p_bo_values[]) = { "all", "backspace", "cursor", "complete",
|
static char *(p_bo_values[]) = { "all", "backspace", "cursor", "complete",
|
||||||
"copy", "ctrlg", "error", "esc", "ex",
|
"copy", "ctrlg", "error", "esc", "ex",
|
||||||
"hangul", "insertmode", "lang", "mess",
|
"hangul", "lang", "mess", "showmatch",
|
||||||
"showmatch", "operator", "register", "shell",
|
"operator", "register", "shell", "spell",
|
||||||
"spell", "wildmode", NULL };
|
"wildmode", NULL };
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// values for the 'belloff' option
|
// values for the 'belloff' option
|
||||||
@@ -485,7 +485,6 @@ EXTERN char_u *p_iconstring; // 'iconstring'
|
|||||||
EXTERN int p_ic; // 'ignorecase'
|
EXTERN int p_ic; // 'ignorecase'
|
||||||
EXTERN int p_is; // 'incsearch'
|
EXTERN int p_is; // 'incsearch'
|
||||||
EXTERN char_u *p_icm; // 'inccommand'
|
EXTERN char_u *p_icm; // 'inccommand'
|
||||||
EXTERN int p_im; // 'insertmode'
|
|
||||||
EXTERN char_u *p_isf; // 'isfname'
|
EXTERN char_u *p_isf; // 'isfname'
|
||||||
EXTERN char_u *p_isi; // 'isident'
|
EXTERN char_u *p_isi; // 'isident'
|
||||||
EXTERN char_u *p_isp; // 'isprint'
|
EXTERN char_u *p_isp; // 'isprint'
|
||||||
|
@@ -1250,9 +1250,9 @@ return {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
full_name='insertmode', abbreviation='im',
|
full_name='insertmode', abbreviation='im',
|
||||||
short_desc=N_("start the edit of a file in Insert mode"),
|
short_desc=N_("No description"),
|
||||||
type='bool', scope={'global'},
|
type='bool', scope={'global'},
|
||||||
varname='p_im',
|
varname='p_force_off',
|
||||||
defaults={if_true=false}
|
defaults={if_true=false}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@@ -2540,9 +2540,7 @@ static int jump_to_help_window(qf_info_T *qi, bool newwin, int *opened_window)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!p_im) {
|
restart_edit = 0; // don't want insert mode in help file
|
||||||
restart_edit = 0; // don't want insert mode in help file
|
|
||||||
}
|
|
||||||
|
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
@@ -16,8 +16,9 @@ func Test_edit_00b()
|
|||||||
call setline(1, ['abc '])
|
call setline(1, ['abc '])
|
||||||
inoreabbr <buffer> h here some more
|
inoreabbr <buffer> h here some more
|
||||||
call cursor(1, 4)
|
call cursor(1, 4)
|
||||||
" <c-l> expands the abbreviation and ends insertmode
|
" <esc> expands the abbreviation and ends insert mode
|
||||||
call feedkeys(":set im\<cr> h\<c-l>:set noim\<cr>", 'tix')
|
" call feedkeys(":set im\<cr> h\<c-l>:set noim\<cr>", 'tix')
|
||||||
|
call feedkeys("i h\<esc>", 'tix')
|
||||||
call assert_equal(['abc here some more '], getline(1,'$'))
|
call assert_equal(['abc here some more '], getline(1,'$'))
|
||||||
iunabbr <buffer> h
|
iunabbr <buffer> h
|
||||||
bw!
|
bw!
|
||||||
@@ -234,15 +235,18 @@ func Test_edit_09()
|
|||||||
call setline(1, ['abc', 'def', 'ghi'])
|
call setline(1, ['abc', 'def', 'ghi'])
|
||||||
call cursor(1, 1)
|
call cursor(1, 1)
|
||||||
" 1) CTRL-\ CTLR-N
|
" 1) CTRL-\ CTLR-N
|
||||||
call feedkeys(":set im\<cr>\<c-\>\<c-n>ccABC\<c-l>", 'txin')
|
" call feedkeys(":set im\<cr>\<c-\>\<c-n>ccABC\<c-l>", 'txin')
|
||||||
|
call feedkeys("i\<c-\>\<c-n>ccABC\<esc>", 'txin')
|
||||||
call assert_equal(['ABC', 'def', 'ghi'], getline(1,'$'))
|
call assert_equal(['ABC', 'def', 'ghi'], getline(1,'$'))
|
||||||
call setline(1, ['ABC', 'def', 'ghi'])
|
call setline(1, ['ABC', 'def', 'ghi'])
|
||||||
" 2) CTRL-\ CTLR-G
|
" 2) CTRL-\ CTLR-G
|
||||||
call feedkeys("j0\<c-\>\<c-g>ZZZ\<cr>\<c-l>", 'txin')
|
" CTRL-\ CTRL-G goes to Insert mode when 'insertmode' is set, but
|
||||||
call assert_equal(['ABC', 'ZZZ', 'def', 'ghi'], getline(1,'$'))
|
" 'insertmode' is now removed so skip this test
|
||||||
call feedkeys("I\<c-\>\<c-g>YYY\<c-l>", 'txin')
|
" call feedkeys("j0\<c-\>\<c-g>ZZZ\<cr>\<esc>", 'txin')
|
||||||
call assert_equal(['ABC', 'ZZZ', 'YYYdef', 'ghi'], getline(1,'$'))
|
" call assert_equal(['ABC', 'ZZZ', 'def', 'ghi'], getline(1,'$'))
|
||||||
set noinsertmode
|
" call feedkeys("I\<c-\>\<c-g>YYY\<c-l>", 'txin')
|
||||||
|
" call assert_equal(['ABC', 'ZZZ', 'YYYdef', 'ghi'], getline(1,'$'))
|
||||||
|
" set noinsertmode
|
||||||
" 3) CTRL-\ CTRL-O
|
" 3) CTRL-\ CTRL-O
|
||||||
call setline(1, ['ABC', 'ZZZ', 'def', 'ghi'])
|
call setline(1, ['ABC', 'ZZZ', 'def', 'ghi'])
|
||||||
call cursor(1, 1)
|
call cursor(1, 1)
|
||||||
@@ -1043,7 +1047,8 @@ endfunc
|
|||||||
func Test_edit_F1()
|
func Test_edit_F1()
|
||||||
" Pressing <f1>
|
" Pressing <f1>
|
||||||
new
|
new
|
||||||
call feedkeys(":set im\<cr>\<f1>\<c-l>", 'tnix')
|
" call feedkeys(":set im\<cr>\<f1>\<c-l>", 'tnix')
|
||||||
|
call feedkeys("i\<f1>\<esc>", 'tnix')
|
||||||
set noinsertmode
|
set noinsertmode
|
||||||
call assert_equal('help', &buftype)
|
call assert_equal('help', &buftype)
|
||||||
bw
|
bw
|
||||||
|
@@ -133,7 +133,8 @@ func Test_normal02_selectmode2()
|
|||||||
" some basic select mode tests
|
" some basic select mode tests
|
||||||
call Setup_NewWindow()
|
call Setup_NewWindow()
|
||||||
50
|
50
|
||||||
call feedkeys(":set im\n\<c-o>gHc\<c-o>:set noim\n", 'tx')
|
" call feedkeys(":set im\n\<c-o>gHc\<c-o>:set noim\n", 'tx')
|
||||||
|
call feedkeys("i\<c-o>gHc\<esc>", 'tx')
|
||||||
call assert_equal('c51', getline('.'))
|
call assert_equal('c51', getline('.'))
|
||||||
" clean up
|
" clean up
|
||||||
bw!
|
bw!
|
||||||
@@ -2113,11 +2114,11 @@ fun! Test_normal40_ctrl_bsl()
|
|||||||
call assert_equal('n', mode())
|
call assert_equal('n', mode())
|
||||||
call assert_equal(1, col('.'))
|
call assert_equal(1, col('.'))
|
||||||
"imap <buffer> , <c-\><c-n>
|
"imap <buffer> , <c-\><c-n>
|
||||||
set im
|
" set im
|
||||||
exe ":norm! \<c-\>\<c-n>dw"
|
exe ":norm! \<c-\>\<c-n>dw"
|
||||||
set noim
|
" set noim
|
||||||
call assert_equal('are some words', getline(1))
|
call assert_equal('are some words', getline(1))
|
||||||
call assert_false(&insertmode)
|
" call assert_false(&insertmode)
|
||||||
|
|
||||||
" clean up
|
" clean up
|
||||||
bw!
|
bw!
|
||||||
|
@@ -6,8 +6,6 @@ local expect = helpers.expect
|
|||||||
local command = helpers.command
|
local command = helpers.command
|
||||||
local eq = helpers.eq
|
local eq = helpers.eq
|
||||||
local eval = helpers.eval
|
local eval = helpers.eval
|
||||||
local meths = helpers.meths
|
|
||||||
local poke_eventloop = helpers.poke_eventloop
|
|
||||||
|
|
||||||
describe('insert-mode', function()
|
describe('insert-mode', function()
|
||||||
before_each(function()
|
before_each(function()
|
||||||
@@ -135,26 +133,4 @@ describe('insert-mode', function()
|
|||||||
feed('i<C-S-V><C-J><C-S-V><C-@><C-S-V><C-[><C-S-V><C-S-M><C-S-V><M-C-I><C-S-V><C-D-J><Esc>')
|
feed('i<C-S-V><C-J><C-S-V><C-@><C-S-V><C-[><C-S-V><C-S-M><C-S-V><M-C-I><C-S-V><C-D-J><Esc>')
|
||||||
expect('<C-J><C-@><C-[><C-S-M><M-C-I><C-D-J>')
|
expect('<C-J><C-@><C-[><C-S-M><M-C-I><C-D-J>')
|
||||||
end)
|
end)
|
||||||
|
|
||||||
describe([[With 'insertmode', Insert mode is not re-entered immediately after <C-L>]], function()
|
|
||||||
before_each(function()
|
|
||||||
command('set insertmode')
|
|
||||||
poke_eventloop()
|
|
||||||
eq({mode = 'i', blocking = false}, meths.get_mode())
|
|
||||||
end)
|
|
||||||
|
|
||||||
it('after calling :edit from <Cmd> mapping', function()
|
|
||||||
command('inoremap <C-B> <Cmd>edit Xfoo<CR>')
|
|
||||||
feed('<C-B><C-L>')
|
|
||||||
poke_eventloop()
|
|
||||||
eq({mode = 'n', blocking = false}, meths.get_mode())
|
|
||||||
end)
|
|
||||||
|
|
||||||
it('after calling :edit from RPC #16823', function()
|
|
||||||
command('edit Xfoo')
|
|
||||||
feed('<C-L>')
|
|
||||||
poke_eventloop()
|
|
||||||
eq({mode = 'n', blocking = false}, meths.get_mode())
|
|
||||||
end)
|
|
||||||
end)
|
|
||||||
end)
|
end)
|
||||||
|
@@ -1,25 +0,0 @@
|
|||||||
-- Test for edit functions
|
|
||||||
-- See also: src/nvim/testdir/test_edit.vim
|
|
||||||
|
|
||||||
local helpers = require('test.functional.helpers')(after_each)
|
|
||||||
local source = helpers.source
|
|
||||||
local eq, eval = helpers.eq, helpers.eval
|
|
||||||
local funcs = helpers.funcs
|
|
||||||
local clear = helpers.clear
|
|
||||||
|
|
||||||
describe('edit', function()
|
|
||||||
before_each(clear)
|
|
||||||
|
|
||||||
it('reset insertmode from i_ctrl-r_=', function()
|
|
||||||
source([=[
|
|
||||||
call setline(1, ['abc'])
|
|
||||||
call cursor(1, 4)
|
|
||||||
call feedkeys(":set im\<cr>ZZZ\<c-r>=setbufvar(1,'&im', 0)\<cr>",'tnix')
|
|
||||||
]=])
|
|
||||||
eq({'abZZZc'}, funcs.getline(1,'$'))
|
|
||||||
eq({0, 1, 1, 0}, funcs.getpos('.'))
|
|
||||||
eq(0, eval('&im'))
|
|
||||||
end)
|
|
||||||
|
|
||||||
end)
|
|
||||||
|
|
Reference in New Issue
Block a user