mirror of
https://github.com/neovim/neovim.git
synced 2024-12-23 20:55:18 -07:00
Compare commits
1 Commits
db2d00185d
...
9e2d109bfa
Author | SHA1 | Date | |
---|---|---|---|
|
9e2d109bfa |
@ -60,7 +60,6 @@ hi('PmenuMatch', { link = 'Pmenu' })
|
|||||||
hi('PmenuMatchSel', { link = 'PmenuSel' })
|
hi('PmenuMatchSel', { link = 'PmenuSel' })
|
||||||
hi('PmenuExtra', { link = 'Pmenu' })
|
hi('PmenuExtra', { link = 'Pmenu' })
|
||||||
hi('PmenuExtraSel', { link = 'PmenuSel' })
|
hi('PmenuExtraSel', { link = 'PmenuSel' })
|
||||||
hi('ComplMatchIns', { link = 'Normal' })
|
|
||||||
hi('Substitute', { link = 'Search' })
|
hi('Substitute', { link = 'Search' })
|
||||||
hi('Whitespace', { link = 'NonText' })
|
hi('Whitespace', { link = 'NonText' })
|
||||||
hi('MsgSeparator', { link = 'StatusLine' })
|
hi('MsgSeparator', { link = 'StatusLine' })
|
||||||
|
@ -101,8 +101,7 @@ The result of foldexpr then determines the fold level as follows:
|
|||||||
"<1", "<2", .. a fold with this level ends at this line
|
"<1", "<2", .. a fold with this level ends at this line
|
||||||
">1", ">2", .. a fold with this level starts at this line
|
">1", ">2", .. a fold with this level starts at this line
|
||||||
|
|
||||||
The result values "=", "s" and "a" are more expensive, please see
|
The result values "=", "s" and "a" are more expensive, please see |fold-expr-slow|.
|
||||||
|fold-expr-slow|.
|
|
||||||
|
|
||||||
It is not required to mark the start (end) of a fold with ">1" ("<1"), a fold
|
It is not required to mark the start (end) of a fold with ">1" ("<1"), a fold
|
||||||
will also start (end) when the fold level is higher (lower) than the fold
|
will also start (end) when the fold level is higher (lower) than the fold
|
||||||
@ -118,7 +117,7 @@ For debugging the 'debug' option can be set to "msg", the error messages will
|
|||||||
be visible then.
|
be visible then.
|
||||||
|
|
||||||
If the 'foldexpr' expression starts with s: or |<SID>|, then it is replaced
|
If the 'foldexpr' expression starts with s: or |<SID>|, then it is replaced
|
||||||
with the script ID (|local-function|). Examples: >
|
with the script ID (|local-function|). Examples: >
|
||||||
set foldexpr=s:MyFoldExpr()
|
set foldexpr=s:MyFoldExpr()
|
||||||
set foldexpr=<SID>SomeFoldExpr()
|
set foldexpr=<SID>SomeFoldExpr()
|
||||||
<
|
<
|
||||||
@ -142,7 +141,7 @@ end in that line.
|
|||||||
It may happen that folds are not updated properly. You can use |zx| or |zX|
|
It may happen that folds are not updated properly. You can use |zx| or |zX|
|
||||||
to force updating folds.
|
to force updating folds.
|
||||||
|
|
||||||
MINIMIZING COMPUTATIONAL COST *fold-expr-slow*
|
Minimizing Computational Cost *fold-expr-slow*
|
||||||
|
|
||||||
Due to its computational cost, this fold method can make Vim unresponsive,
|
Due to its computational cost, this fold method can make Vim unresponsive,
|
||||||
especially when the fold level of all lines have to be initially computed.
|
especially when the fold level of all lines have to be initially computed.
|
||||||
@ -150,15 +149,13 @@ Afterwards, after each change, Vim restricts the computation of foldlevels
|
|||||||
to those lines whose fold level was affected by it (and reuses the known
|
to those lines whose fold level was affected by it (and reuses the known
|
||||||
foldlevels of all the others).
|
foldlevels of all the others).
|
||||||
|
|
||||||
The fold expression should therefore strive to minimize the number of
|
The fold expression should therefore strive to minimize the number of dependent
|
||||||
dependent lines needed for the computation of a given line: For example, try
|
lines needed for the computation of a given line: For example, try to avoid the
|
||||||
to avoid the "=", "a" and "s" return values, because these will require the
|
"=", "a" and "s" return values, because these will require the evaluation of the
|
||||||
evaluation of the fold levels on previous lines until an independent fold
|
fold levels on previous lines until an independent fold level is found.
|
||||||
level is found.
|
|
||||||
|
|
||||||
If this proves difficult, the next best thing could be to cache all fold
|
If this proves difficult, the next best thing could be to cache all fold levels
|
||||||
levels in a buffer-local variable (b:foldlevels) that is only updated on
|
in a buffer-local variable (b:foldlevels) that is only updated on |b:changedtick|:
|
||||||
|b:changedtick|:
|
|
||||||
>vim
|
>vim
|
||||||
func MyFoldFunc()
|
func MyFoldFunc()
|
||||||
if b:lasttick == b:changedtick
|
if b:lasttick == b:changedtick
|
||||||
@ -409,8 +406,8 @@ zX Undo manually opened and closed folds: re-apply 'foldlevel'.
|
|||||||
Also forces recomputing folds, like |zx|.
|
Also forces recomputing folds, like |zx|.
|
||||||
|
|
||||||
*zm*
|
*zm*
|
||||||
zm Fold more: Subtract |v:count1| from 'foldlevel'. If
|
zm Fold more: Subtract |v:count1| from 'foldlevel'. If 'foldlevel' was
|
||||||
'foldlevel' was already zero nothing happens.
|
already zero nothing happens.
|
||||||
'foldenable' will be set.
|
'foldenable' will be set.
|
||||||
|
|
||||||
*zM*
|
*zM*
|
||||||
@ -474,7 +471,7 @@ zk Move upwards to the end of the previous fold. A closed fold
|
|||||||
|
|
||||||
EXECUTING COMMANDS ON FOLDS ~
|
EXECUTING COMMANDS ON FOLDS ~
|
||||||
|
|
||||||
:[range]foldd[oopen] {cmd} *:foldd* *:folddo* *:folddoopen*
|
:[range]foldd[oopen] {cmd} *:foldd* *:folddo* *:folddoopen*
|
||||||
Execute {cmd} on all lines that are not in a closed fold.
|
Execute {cmd} on all lines that are not in a closed fold.
|
||||||
When [range] is given, only these lines are used.
|
When [range] is given, only these lines are used.
|
||||||
Each time {cmd} is executed the cursor is positioned on the
|
Each time {cmd} is executed the cursor is positioned on the
|
||||||
@ -562,7 +559,7 @@ When there is room after the text, it is filled with the character specified
|
|||||||
by 'fillchars'.
|
by 'fillchars'.
|
||||||
|
|
||||||
If the 'foldtext' expression starts with s: or |<SID>|, then it is replaced
|
If the 'foldtext' expression starts with s: or |<SID>|, then it is replaced
|
||||||
with the script ID (|local-function|). Examples: >
|
with the script ID (|local-function|). Examples: >
|
||||||
set foldtext=s:MyFoldText()
|
set foldtext=s:MyFoldText()
|
||||||
set foldtext=<SID>SomeFoldText()
|
set foldtext=<SID>SomeFoldText()
|
||||||
<
|
<
|
||||||
|
@ -1126,9 +1126,6 @@ Lua module: vim.lsp.client *lsp-client*
|
|||||||
• {server_capabilities} (`lsp.ServerCapabilities?`) Response from the
|
• {server_capabilities} (`lsp.ServerCapabilities?`) Response from the
|
||||||
server sent on `initialize` describing the
|
server sent on `initialize` describing the
|
||||||
server's capabilities.
|
server's capabilities.
|
||||||
• {server_info} (`lsp.ServerInfo?`) Response from the server
|
|
||||||
sent on `initialize` describing information
|
|
||||||
about the server.
|
|
||||||
• {progress} (`vim.lsp.Client.Progress`) A ring buffer
|
• {progress} (`vim.lsp.Client.Progress`) A ring buffer
|
||||||
(|vim.ringbuf()|) containing progress messages
|
(|vim.ringbuf()|) containing progress messages
|
||||||
sent by the server. See
|
sent by the server. See
|
||||||
|
@ -118,8 +118,8 @@ Note that when using ":" any motion becomes charwise exclusive.
|
|||||||
*inclusive-motion-selection-exclusive*
|
*inclusive-motion-selection-exclusive*
|
||||||
When 'selection' is "exclusive", |Visual| mode is active and an inclusive
|
When 'selection' is "exclusive", |Visual| mode is active and an inclusive
|
||||||
motion has been used, the cursor position will be adjusted by another
|
motion has been used, the cursor position will be adjusted by another
|
||||||
character to the right, so that the Visual selection includes the expected
|
character to the right, so that visual selction includes the expected text and
|
||||||
text and can be acted upon.
|
can be acted upon.
|
||||||
|
|
||||||
*forced-motion*
|
*forced-motion*
|
||||||
FORCING A MOTION TO BE LINEWISE, CHARWISE OR BLOCKWISE
|
FORCING A MOTION TO BE LINEWISE, CHARWISE OR BLOCKWISE
|
||||||
|
@ -115,7 +115,6 @@ LSP
|
|||||||
• |vim.lsp.util.make_position_params()|, |vim.lsp.util.make_range_params()|
|
• |vim.lsp.util.make_position_params()|, |vim.lsp.util.make_range_params()|
|
||||||
and |vim.lsp.util.make_given_range_params()| now require the `position_encoding`
|
and |vim.lsp.util.make_given_range_params()| now require the `position_encoding`
|
||||||
parameter.
|
parameter.
|
||||||
• `:checkhealth vim.lsp` displays the server version (if available).
|
|
||||||
|
|
||||||
LUA
|
LUA
|
||||||
|
|
||||||
@ -217,7 +216,6 @@ EDITOR
|
|||||||
• On Windows, filename arguments on the command-line prefixed with "~\" or
|
• On Windows, filename arguments on the command-line prefixed with "~\" or
|
||||||
"~/" are now expanded to the user's profile directory, not a relative path
|
"~/" are now expanded to the user's profile directory, not a relative path
|
||||||
to a literal "~" directory.
|
to a literal "~" directory.
|
||||||
• |hl-ComplMatchIns| shows matched text of the currently inserted completion.
|
|
||||||
• |hl-PmenuMatch| and |hl-PmenuMatchSel| show matched text in completion popup.
|
• |hl-PmenuMatch| and |hl-PmenuMatchSel| show matched text in completion popup.
|
||||||
|
|
||||||
EVENTS
|
EVENTS
|
||||||
|
@ -5243,8 +5243,6 @@ PmenuMatch Popup menu: Matched text in normal item. Combined with
|
|||||||
*hl-PmenuMatchSel*
|
*hl-PmenuMatchSel*
|
||||||
PmenuMatchSel Popup menu: Matched text in selected item. Combined with
|
PmenuMatchSel Popup menu: Matched text in selected item. Combined with
|
||||||
|hl-PmenuMatch| and |hl-PmenuSel|.
|
|hl-PmenuMatch| and |hl-PmenuSel|.
|
||||||
*hl-ComplMatchIns*
|
|
||||||
ComplMatchIns Matched text of the currently inserted completion.
|
|
||||||
*hl-Question*
|
*hl-Question*
|
||||||
Question |hit-enter| prompt and yes/no questions.
|
Question |hit-enter| prompt and yes/no questions.
|
||||||
*hl-QuickFixLine*
|
*hl-QuickFixLine*
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -211,7 +211,7 @@ local function reuse_client_default(client, config)
|
|||||||
|
|
||||||
for _, config_folder in ipairs(config_folders) do
|
for _, config_folder in ipairs(config_folders) do
|
||||||
local found = false
|
local found = false
|
||||||
for _, client_folder in ipairs(client.workspace_folders or {}) do
|
for _, client_folder in ipairs(client.workspace_folders) do
|
||||||
if config_folder.uri == client_folder.uri then
|
if config_folder.uri == client_folder.uri then
|
||||||
found = true
|
found = true
|
||||||
break
|
break
|
||||||
|
@ -174,10 +174,6 @@ local validate = vim.validate
|
|||||||
--- capabilities.
|
--- capabilities.
|
||||||
--- @field server_capabilities lsp.ServerCapabilities?
|
--- @field server_capabilities lsp.ServerCapabilities?
|
||||||
---
|
---
|
||||||
--- Response from the server sent on `initialize` describing information about
|
|
||||||
--- the server.
|
|
||||||
--- @field server_info lsp.ServerInfo?
|
|
||||||
---
|
|
||||||
--- A ring buffer (|vim.ringbuf()|) containing progress messages
|
--- A ring buffer (|vim.ringbuf()|) containing progress messages
|
||||||
--- sent by the server.
|
--- sent by the server.
|
||||||
--- @field progress vim.lsp.Client.Progress
|
--- @field progress vim.lsp.Client.Progress
|
||||||
@ -560,8 +556,6 @@ function Client:initialize()
|
|||||||
self.offset_encoding = self.server_capabilities.positionEncoding
|
self.offset_encoding = self.server_capabilities.positionEncoding
|
||||||
end
|
end
|
||||||
|
|
||||||
self.server_info = result.serverInfo
|
|
||||||
|
|
||||||
if next(self.settings) then
|
if next(self.settings) then
|
||||||
self:notify(ms.workspace_didChangeConfiguration, { settings = self.settings })
|
self:notify(ms.workspace_didChangeConfiguration, { settings = self.settings })
|
||||||
end
|
end
|
||||||
|
@ -40,8 +40,6 @@ local function check_active_clients()
|
|||||||
local clients = vim.lsp.get_clients()
|
local clients = vim.lsp.get_clients()
|
||||||
if next(clients) then
|
if next(clients) then
|
||||||
for _, client in pairs(clients) do
|
for _, client in pairs(clients) do
|
||||||
local server_version = vim.tbl_get(client, 'server_info', 'version')
|
|
||||||
or '? (no serverInfo.version response)'
|
|
||||||
local cmd ---@type string
|
local cmd ---@type string
|
||||||
local ccmd = client.config.cmd
|
local ccmd = client.config.cmd
|
||||||
if type(ccmd) == 'table' then
|
if type(ccmd) == 'table' then
|
||||||
@ -64,7 +62,6 @@ local function check_active_clients()
|
|||||||
end
|
end
|
||||||
report_info(table.concat({
|
report_info(table.concat({
|
||||||
string.format('%s (id: %d)', client.name, client.id),
|
string.format('%s (id: %d)', client.name, client.id),
|
||||||
string.format('- Version: %s', server_version),
|
|
||||||
dirs_info,
|
dirs_info,
|
||||||
string.format('- Command: %s', cmd),
|
string.format('- Command: %s', cmd),
|
||||||
string.format('- Settings: %s', vim.inspect(client.settings, { newline = '\n ' })),
|
string.format('- Settings: %s', vim.inspect(client.settings, { newline = '\n ' })),
|
||||||
|
@ -8,9 +8,9 @@ vim.api.nvim_create_user_command('Man', function(params)
|
|||||||
if params.bang then
|
if params.bang then
|
||||||
man.init_pager()
|
man.init_pager()
|
||||||
else
|
else
|
||||||
local err = man.open_page(params.count, params.smods, params.fargs)
|
local ok, err = pcall(man.open_page, params.count, params.smods, params.fargs)
|
||||||
if err then
|
if not ok then
|
||||||
vim.notify('man.lua: ' .. err, vim.log.levels.ERROR)
|
vim.notify(man.errormsg or err, vim.log.levels.ERROR)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end, {
|
end, {
|
||||||
@ -31,9 +31,6 @@ vim.api.nvim_create_autocmd('BufReadCmd', {
|
|||||||
pattern = 'man://*',
|
pattern = 'man://*',
|
||||||
nested = true,
|
nested = true,
|
||||||
callback = function(params)
|
callback = function(params)
|
||||||
local err = require('man').read_page(assert(params.match:match('man://(.*)')))
|
require('man').read_page(vim.fn.matchstr(params.match, 'man://\\zs.*'))
|
||||||
if err then
|
|
||||||
vim.notify('man.lua: ' .. err, vim.log.levels.ERROR)
|
|
||||||
end
|
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
@ -229,9 +229,10 @@ static Object _call_function(String fn, Array args, dict_T *self, Arena *arena,
|
|||||||
funcexe.fe_selfdict = self;
|
funcexe.fe_selfdict = self;
|
||||||
|
|
||||||
TRY_WRAP(err, {
|
TRY_WRAP(err, {
|
||||||
// call_func() retval is deceptive, ignore it. Instead TRY_WRAP sets `msg_list` to capture
|
// call_func() retval is deceptive, ignore it. Instead we set `msg_list`
|
||||||
// abort-causing non-exception errors.
|
// (see above) to capture abort-causing non-exception errors.
|
||||||
(void)call_func(fn.data, (int)fn.size, &rettv, (int)args.size, vim_args, &funcexe);
|
call_func(fn.data, (int)fn.size, &rettv, (int)args.size,
|
||||||
|
vim_args, &funcexe);
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!ERROR_SET(err)) {
|
if (!ERROR_SET(err)) {
|
||||||
@ -279,23 +280,18 @@ Object nvim_call_dict_function(Object dict, String fn, Array args, Arena *arena,
|
|||||||
typval_T rettv;
|
typval_T rettv;
|
||||||
bool mustfree = false;
|
bool mustfree = false;
|
||||||
switch (dict.type) {
|
switch (dict.type) {
|
||||||
case kObjectTypeString: {
|
case kObjectTypeString:
|
||||||
int eval_ret;
|
|
||||||
TRY_WRAP(err, {
|
TRY_WRAP(err, {
|
||||||
eval_ret = eval0(dict.data.string.data, &rettv, NULL, &EVALARG_EVALUATE);
|
eval0(dict.data.string.data, &rettv, NULL, &EVALARG_EVALUATE);
|
||||||
clear_evalarg(&EVALARG_EVALUATE, NULL);
|
clear_evalarg(&EVALARG_EVALUATE, NULL);
|
||||||
});
|
});
|
||||||
if (ERROR_SET(err)) {
|
if (ERROR_SET(err)) {
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
if (eval_ret != OK) {
|
|
||||||
abort(); // Should not happen.
|
|
||||||
}
|
|
||||||
// Evaluation of the string arg created a new dict or increased the
|
// Evaluation of the string arg created a new dict or increased the
|
||||||
// refcount of a dict. Not necessary for a RPC dict.
|
// refcount of a dict. Not necessary for a RPC dict.
|
||||||
mustfree = true;
|
mustfree = true;
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
case kObjectTypeDict:
|
case kObjectTypeDict:
|
||||||
object_to_vim(dict, &rettv, err);
|
object_to_vim(dict, &rettv, err);
|
||||||
break;
|
break;
|
||||||
|
@ -31,7 +31,6 @@
|
|||||||
#include "nvim/highlight_defs.h"
|
#include "nvim/highlight_defs.h"
|
||||||
#include "nvim/highlight_group.h"
|
#include "nvim/highlight_group.h"
|
||||||
#include "nvim/indent.h"
|
#include "nvim/indent.h"
|
||||||
#include "nvim/insexpand.h"
|
|
||||||
#include "nvim/mark_defs.h"
|
#include "nvim/mark_defs.h"
|
||||||
#include "nvim/marktree_defs.h"
|
#include "nvim/marktree_defs.h"
|
||||||
#include "nvim/match.h"
|
#include "nvim/match.h"
|
||||||
@ -935,7 +934,6 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, int col_rows, s
|
|||||||
colnr_T vcol_prev = -1; // "wlv.vcol" of previous character
|
colnr_T vcol_prev = -1; // "wlv.vcol" of previous character
|
||||||
ScreenGrid *grid = &wp->w_grid; // grid specific to the window
|
ScreenGrid *grid = &wp->w_grid; // grid specific to the window
|
||||||
|
|
||||||
const bool in_curline = wp == curwin && lnum == curwin->w_cursor.lnum;
|
|
||||||
const bool has_fold = foldinfo.fi_level != 0 && foldinfo.fi_lines > 0;
|
const bool has_fold = foldinfo.fi_level != 0 && foldinfo.fi_lines > 0;
|
||||||
const bool has_foldtext = has_fold && *wp->w_p_fdt != NUL;
|
const bool has_foldtext = has_fold && *wp->w_p_fdt != NUL;
|
||||||
|
|
||||||
@ -1119,7 +1117,7 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, int col_rows, s
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check if the char under the cursor should be inverted (highlighted).
|
// Check if the char under the cursor should be inverted (highlighted).
|
||||||
if (!highlight_match && in_curline
|
if (!highlight_match && lnum == curwin->w_cursor.lnum && wp == curwin
|
||||||
&& cursor_is_block_during_visual(*p_sel == 'e')) {
|
&& cursor_is_block_during_visual(*p_sel == 'e')) {
|
||||||
noinvcur = true;
|
noinvcur = true;
|
||||||
}
|
}
|
||||||
@ -1631,7 +1629,8 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, int col_rows, s
|
|||||||
}
|
}
|
||||||
|
|
||||||
// When still displaying '$' of change command, stop at cursor.
|
// When still displaying '$' of change command, stop at cursor.
|
||||||
if (dollar_vcol >= 0 && in_curline && wlv.vcol >= wp->w_virtcol) {
|
if (dollar_vcol >= 0 && wp == curwin
|
||||||
|
&& lnum == wp->w_cursor.lnum && wlv.vcol >= wp->w_virtcol) {
|
||||||
draw_virt_text(wp, buf, win_col_offset, &wlv.col, wlv.row);
|
draw_virt_text(wp, buf, win_col_offset, &wlv.col, wlv.row);
|
||||||
// don't clear anything after wlv.col
|
// don't clear anything after wlv.col
|
||||||
wlv_put_linebuf(wp, &wlv, wlv.col, false, bg_attr, 0);
|
wlv_put_linebuf(wp, &wlv, wlv.col, false, bg_attr, 0);
|
||||||
@ -1787,16 +1786,6 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, int col_rows, s
|
|||||||
wlv.char_attr = hl_combine_attr(char_attr_base, char_attr_pri);
|
wlv.char_attr = hl_combine_attr(char_attr_base, char_attr_pri);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Apply ComplMatchIns highlight if needed.
|
|
||||||
if (wlv.filler_todo <= 0
|
|
||||||
&& (State & MODE_INSERT) && in_curline && ins_compl_active()) {
|
|
||||||
int ins_match_attr = ins_compl_col_range_attr((int)(ptr - line));
|
|
||||||
if (ins_match_attr > 0) {
|
|
||||||
char_attr_pri = hl_combine_attr(char_attr_pri, ins_match_attr);
|
|
||||||
wlv.char_attr = hl_combine_attr(char_attr_base, char_attr_pri);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (draw_folded && has_foldtext && wlv.n_extra == 0 && wlv.col == win_col_offset) {
|
if (draw_folded && has_foldtext && wlv.n_extra == 0 && wlv.col == win_col_offset) {
|
||||||
const int v = (int)(ptr - line);
|
const int v = (int)(ptr - line);
|
||||||
linenr_T lnume = lnum + foldinfo.fi_lines - 1;
|
linenr_T lnume = lnum + foldinfo.fi_lines - 1;
|
||||||
@ -2457,7 +2446,8 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, int col_rows, s
|
|||||||
// With 'virtualedit' we may never reach cursor position, but we still
|
// With 'virtualedit' we may never reach cursor position, but we still
|
||||||
// need to correct the cursor column, so do that at end of line.
|
// need to correct the cursor column, so do that at end of line.
|
||||||
if (!did_wcol && wlv.filler_todo <= 0
|
if (!did_wcol && wlv.filler_todo <= 0
|
||||||
&& in_curline && conceal_cursor_line(wp)
|
&& wp == curwin && lnum == wp->w_cursor.lnum
|
||||||
|
&& conceal_cursor_line(wp)
|
||||||
&& (wlv.vcol + wlv.skip_cells >= wp->w_virtcol || mb_schar == NUL)) {
|
&& (wlv.vcol + wlv.skip_cells >= wp->w_virtcol || mb_schar == NUL)) {
|
||||||
wp->w_wcol = wlv.col - wlv.boguscols;
|
wp->w_wcol = wlv.col - wlv.boguscols;
|
||||||
if (wlv.vcol + wlv.skip_cells < wp->w_virtcol) {
|
if (wlv.vcol + wlv.skip_cells < wp->w_virtcol) {
|
||||||
@ -2650,7 +2640,7 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, int col_rows, s
|
|||||||
|
|
||||||
// Update w_cline_height and w_cline_folded if the cursor line was
|
// Update w_cline_height and w_cline_folded if the cursor line was
|
||||||
// updated (saves a call to plines_win() later).
|
// updated (saves a call to plines_win() later).
|
||||||
if (in_curline) {
|
if (wp == curwin && lnum == curwin->w_cursor.lnum) {
|
||||||
curwin->w_cline_row = startrow;
|
curwin->w_cline_row = startrow;
|
||||||
curwin->w_cline_height = wlv.row - startrow;
|
curwin->w_cline_height = wlv.row - startrow;
|
||||||
curwin->w_cline_folded = has_fold;
|
curwin->w_cline_folded = has_fold;
|
||||||
|
@ -173,7 +173,6 @@ static const char *highlight_init_both[] = {
|
|||||||
"default link PmenuKind Pmenu",
|
"default link PmenuKind Pmenu",
|
||||||
"default link PmenuKindSel PmenuSel",
|
"default link PmenuKindSel PmenuSel",
|
||||||
"default link PmenuSbar Pmenu",
|
"default link PmenuSbar Pmenu",
|
||||||
"default link ComplMatchIns Normal",
|
|
||||||
"default link Substitute Search",
|
"default link Substitute Search",
|
||||||
"default link StatusLineTerm StatusLine",
|
"default link StatusLineTerm StatusLine",
|
||||||
"default link StatusLineTermNC StatusLineNC",
|
"default link StatusLineTermNC StatusLineNC",
|
||||||
|
@ -256,7 +256,6 @@ static pos_T compl_startpos;
|
|||||||
static int compl_length = 0;
|
static int compl_length = 0;
|
||||||
static colnr_T compl_col = 0; ///< column where the text starts
|
static colnr_T compl_col = 0; ///< column where the text starts
|
||||||
///< that is being completed
|
///< that is being completed
|
||||||
static colnr_T compl_ins_end_col = 0;
|
|
||||||
static char *compl_orig_text = NULL; ///< text as it was before
|
static char *compl_orig_text = NULL; ///< text as it was before
|
||||||
///< completion started
|
///< completion started
|
||||||
/// Undo information to restore extmarks for original text.
|
/// Undo information to restore extmarks for original text.
|
||||||
@ -283,11 +282,6 @@ static size_t spell_bad_len = 0; // length of located bad word
|
|||||||
|
|
||||||
static int compl_selected_item = -1;
|
static int compl_selected_item = -1;
|
||||||
|
|
||||||
// "compl_match_array" points the currently displayed list of entries in the
|
|
||||||
// popup menu. It is NULL when there is no popup menu.
|
|
||||||
static pumitem_T *compl_match_array = NULL;
|
|
||||||
static int compl_match_arraysize;
|
|
||||||
|
|
||||||
/// CTRL-X pressed in Insert mode.
|
/// CTRL-X pressed in Insert mode.
|
||||||
void ins_ctrl_x(void)
|
void ins_ctrl_x(void)
|
||||||
{
|
{
|
||||||
@ -949,30 +943,6 @@ static bool ins_compl_equal(compl_T *match, char *str, size_t len)
|
|||||||
return strncmp(match->cp_str, str, len) == 0;
|
return strncmp(match->cp_str, str, len) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// when len is -1 mean use whole length of p otherwise part of p
|
|
||||||
static void ins_compl_insert_bytes(char *p, int len)
|
|
||||||
FUNC_ATTR_NONNULL_ALL
|
|
||||||
{
|
|
||||||
if (len == -1) {
|
|
||||||
len = (int)strlen(p);
|
|
||||||
}
|
|
||||||
assert(len >= 0);
|
|
||||||
ins_bytes_len(p, (size_t)len);
|
|
||||||
compl_ins_end_col = curwin->w_cursor.col - 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Checks if the column is within the currently inserted completion text
|
|
||||||
/// column range. If it is, it returns a special highlight attribute.
|
|
||||||
/// -1 mean normal item.
|
|
||||||
int ins_compl_col_range_attr(int col)
|
|
||||||
{
|
|
||||||
if (col >= compl_col && col < compl_ins_end_col) {
|
|
||||||
return syn_name2attr("ComplMatchIns");
|
|
||||||
}
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Reduce the longest common string for match "match".
|
/// Reduce the longest common string for match "match".
|
||||||
static void ins_compl_longest_match(compl_T *match)
|
static void ins_compl_longest_match(compl_T *match)
|
||||||
{
|
{
|
||||||
@ -982,7 +952,7 @@ static void ins_compl_longest_match(compl_T *match)
|
|||||||
|
|
||||||
bool had_match = (curwin->w_cursor.col > compl_col);
|
bool had_match = (curwin->w_cursor.col > compl_col);
|
||||||
ins_compl_delete(false);
|
ins_compl_delete(false);
|
||||||
ins_compl_insert_bytes(compl_leader + get_compl_len(), -1);
|
ins_bytes(compl_leader + get_compl_len());
|
||||||
ins_redraw(false);
|
ins_redraw(false);
|
||||||
|
|
||||||
// When the match isn't there (to avoid matching itself) remove it
|
// When the match isn't there (to avoid matching itself) remove it
|
||||||
@ -1016,7 +986,7 @@ static void ins_compl_longest_match(compl_T *match)
|
|||||||
*p = NUL;
|
*p = NUL;
|
||||||
bool had_match = (curwin->w_cursor.col > compl_col);
|
bool had_match = (curwin->w_cursor.col > compl_col);
|
||||||
ins_compl_delete(false);
|
ins_compl_delete(false);
|
||||||
ins_compl_insert_bytes(compl_leader + get_compl_len(), -1);
|
ins_bytes(compl_leader + get_compl_len());
|
||||||
ins_redraw(false);
|
ins_redraw(false);
|
||||||
|
|
||||||
// When the match isn't there (to avoid matching itself) remove it
|
// When the match isn't there (to avoid matching itself) remove it
|
||||||
@ -1088,6 +1058,11 @@ unsigned get_cot_flags(void)
|
|||||||
return curbuf->b_cot_flags != 0 ? curbuf->b_cot_flags : cot_flags;
|
return curbuf->b_cot_flags != 0 ? curbuf->b_cot_flags : cot_flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// "compl_match_array" points the currently displayed list of entries in the
|
||||||
|
/// popup menu. It is NULL when there is no popup menu.
|
||||||
|
static pumitem_T *compl_match_array = NULL;
|
||||||
|
static int compl_match_arraysize;
|
||||||
|
|
||||||
/// Remove any popup menu.
|
/// Remove any popup menu.
|
||||||
static void ins_compl_del_pum(void)
|
static void ins_compl_del_pum(void)
|
||||||
{
|
{
|
||||||
@ -1703,7 +1678,6 @@ void ins_compl_clear(void)
|
|||||||
compl_cont_status = 0;
|
compl_cont_status = 0;
|
||||||
compl_started = false;
|
compl_started = false;
|
||||||
compl_matches = 0;
|
compl_matches = 0;
|
||||||
compl_ins_end_col = 0;
|
|
||||||
XFREE_CLEAR(compl_pattern);
|
XFREE_CLEAR(compl_pattern);
|
||||||
compl_patternlen = 0;
|
compl_patternlen = 0;
|
||||||
XFREE_CLEAR(compl_leader);
|
XFREE_CLEAR(compl_leader);
|
||||||
@ -1828,7 +1802,7 @@ static void ins_compl_new_leader(void)
|
|||||||
{
|
{
|
||||||
ins_compl_del_pum();
|
ins_compl_del_pum();
|
||||||
ins_compl_delete(true);
|
ins_compl_delete(true);
|
||||||
ins_compl_insert_bytes(compl_leader + get_compl_len(), -1);
|
ins_bytes(compl_leader + get_compl_len());
|
||||||
compl_used_match = false;
|
compl_used_match = false;
|
||||||
|
|
||||||
if (compl_started) {
|
if (compl_started) {
|
||||||
@ -2163,7 +2137,7 @@ static bool ins_compl_stop(const int c, const int prev_mode, bool retval)
|
|||||||
const int compl_len = get_compl_len();
|
const int compl_len = get_compl_len();
|
||||||
const int len = (int)strlen(p);
|
const int len = (int)strlen(p);
|
||||||
if (len > compl_len) {
|
if (len > compl_len) {
|
||||||
ins_compl_insert_bytes(p + compl_len, len - compl_len);
|
ins_bytes_len(p + compl_len, (size_t)(len - compl_len));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
restore_orig_extmarks();
|
restore_orig_extmarks();
|
||||||
@ -3665,7 +3639,7 @@ void ins_compl_insert(bool in_compl_func)
|
|||||||
// Make sure we don't go over the end of the string, this can happen with
|
// Make sure we don't go over the end of the string, this can happen with
|
||||||
// illegal bytes.
|
// illegal bytes.
|
||||||
if (compl_len < (int)strlen(compl_shown_match->cp_str)) {
|
if (compl_len < (int)strlen(compl_shown_match->cp_str)) {
|
||||||
ins_compl_insert_bytes(compl_shown_match->cp_str + compl_len, -1);
|
ins_bytes(compl_shown_match->cp_str + compl_len);
|
||||||
}
|
}
|
||||||
compl_used_match = !match_at_original_text(compl_shown_match);
|
compl_used_match = !match_at_original_text(compl_shown_match);
|
||||||
|
|
||||||
@ -3914,15 +3888,14 @@ static int ins_compl_next(bool allow_get_expansion, int count, bool insert_match
|
|||||||
|
|
||||||
// Insert the text of the new completion, or the compl_leader.
|
// Insert the text of the new completion, or the compl_leader.
|
||||||
if (compl_no_insert && !started) {
|
if (compl_no_insert && !started) {
|
||||||
ins_compl_insert_bytes(compl_orig_text + get_compl_len(), -1);
|
ins_bytes(compl_orig_text + get_compl_len());
|
||||||
compl_used_match = false;
|
compl_used_match = false;
|
||||||
restore_orig_extmarks();
|
restore_orig_extmarks();
|
||||||
} else if (insert_match) {
|
} else if (insert_match) {
|
||||||
if (!compl_get_longest || compl_used_match) {
|
if (!compl_get_longest || compl_used_match) {
|
||||||
ins_compl_insert(in_compl_func);
|
ins_compl_insert(in_compl_func);
|
||||||
} else {
|
} else {
|
||||||
assert(compl_leader != NULL);
|
ins_bytes(compl_leader + get_compl_len());
|
||||||
ins_compl_insert_bytes(compl_leader + get_compl_len(), -1);
|
|
||||||
}
|
}
|
||||||
if (!strcmp(compl_curr_match->cp_str, compl_orig_text)) {
|
if (!strcmp(compl_curr_match->cp_str, compl_orig_text)) {
|
||||||
restore_orig_extmarks();
|
restore_orig_extmarks();
|
||||||
|
@ -35,7 +35,6 @@
|
|||||||
#include "nvim/strings.h"
|
#include "nvim/strings.h"
|
||||||
#include "nvim/textformat.h"
|
#include "nvim/textformat.h"
|
||||||
#include "nvim/textobject.h"
|
#include "nvim/textobject.h"
|
||||||
#include "nvim/ui.h"
|
|
||||||
#include "nvim/undo.h"
|
#include "nvim/undo.h"
|
||||||
#include "nvim/vim_defs.h"
|
#include "nvim/vim_defs.h"
|
||||||
#include "nvim/window.h"
|
#include "nvim/window.h"
|
||||||
@ -1050,18 +1049,12 @@ void format_lines(linenr_T line_count, bool avoid_fex)
|
|||||||
State = MODE_INSERT; // for open_line()
|
State = MODE_INSERT; // for open_line()
|
||||||
smd_save = p_smd;
|
smd_save = p_smd;
|
||||||
p_smd = false;
|
p_smd = false;
|
||||||
|
|
||||||
insertchar(NUL, INSCHAR_FORMAT
|
insertchar(NUL, INSCHAR_FORMAT
|
||||||
+ (do_comments ? INSCHAR_DO_COM : 0)
|
+ (do_comments ? INSCHAR_DO_COM : 0)
|
||||||
+ (do_comments && do_comments_list ? INSCHAR_COM_LIST : 0)
|
+ (do_comments && do_comments_list ? INSCHAR_COM_LIST : 0)
|
||||||
+ (avoid_fex ? INSCHAR_NO_FEX : 0), second_indent);
|
+ (avoid_fex ? INSCHAR_NO_FEX : 0), second_indent);
|
||||||
|
|
||||||
State = old_State;
|
State = old_State;
|
||||||
p_smd = smd_save;
|
p_smd = smd_save;
|
||||||
// Cursor shape may have been updated (e.g. by :normal) in insertchar(),
|
|
||||||
// so it needs to be updated here.
|
|
||||||
ui_cursor_shape();
|
|
||||||
|
|
||||||
second_indent = -1;
|
second_indent = -1;
|
||||||
// at end of par.: need to set indent of next par.
|
// at end of par.: need to set indent of next par.
|
||||||
need_set_indent = is_end_par;
|
need_set_indent = is_end_par;
|
||||||
|
@ -1854,20 +1854,6 @@ describe('LSP', function()
|
|||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
end)
|
end)
|
||||||
|
|
||||||
it('vim.lsp.start when existing client has no workspace_folders', function()
|
|
||||||
exec_lua(create_server_definition)
|
|
||||||
eq(
|
|
||||||
{ 2, 'foo', 'foo' },
|
|
||||||
exec_lua(function()
|
|
||||||
local server = _G._create_server()
|
|
||||||
vim.lsp.start { cmd = server.cmd, name = 'foo' }
|
|
||||||
vim.lsp.start { cmd = server.cmd, name = 'foo', root_dir = 'bar' }
|
|
||||||
local foos = vim.lsp.get_clients()
|
|
||||||
return { #foos, foos[1].name, foos[2].name }
|
|
||||||
end)
|
|
||||||
)
|
|
||||||
end)
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
describe('parsing tests', function()
|
describe('parsing tests', function()
|
||||||
|
@ -21,12 +21,13 @@ local function get_search_history(name)
|
|||||||
local man = require('man')
|
local man = require('man')
|
||||||
local res = {}
|
local res = {}
|
||||||
--- @diagnostic disable-next-line:duplicate-set-field
|
--- @diagnostic disable-next-line:duplicate-set-field
|
||||||
man._find_path = function(name0, sect)
|
man.find_path = function(sect, name0)
|
||||||
table.insert(res, { sect, name0 })
|
table.insert(res, { sect, name0 })
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
local err = man.open_page(-1, { tab = 0 }, args)
|
local ok, rv = pcall(man.open_page, -1, { tab = 0 }, args)
|
||||||
assert(err and err:match('no manual entry'))
|
assert(not ok)
|
||||||
|
assert(rv and rv:match('no manual entry'))
|
||||||
return res
|
return res
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
@ -224,7 +225,7 @@ describe(':Man', function()
|
|||||||
matches('^/.+', actual_file)
|
matches('^/.+', actual_file)
|
||||||
local args = { nvim_prog, '--headless', '+:Man ' .. actual_file, '+q' }
|
local args = { nvim_prog, '--headless', '+:Man ' .. actual_file, '+q' }
|
||||||
matches(
|
matches(
|
||||||
('Error detected while processing command line:\r\n' .. 'man.lua: no manual entry for %s'):format(
|
('Error detected while processing command line:\r\n' .. 'man.lua: "no manual entry for %s"'):format(
|
||||||
pesc(actual_file)
|
pesc(actual_file)
|
||||||
),
|
),
|
||||||
fn.system(args, { '' })
|
fn.system(args, { '' })
|
||||||
@ -234,8 +235,8 @@ describe(':Man', function()
|
|||||||
|
|
||||||
it('tries variants with spaces, underscores #22503', function()
|
it('tries variants with spaces, underscores #22503', function()
|
||||||
eq({
|
eq({
|
||||||
{ vim.NIL, 'NAME WITH SPACES' },
|
{ '', 'NAME WITH SPACES' },
|
||||||
{ vim.NIL, 'NAME_WITH_SPACES' },
|
{ '', 'NAME_WITH_SPACES' },
|
||||||
}, get_search_history('NAME WITH SPACES'))
|
}, get_search_history('NAME WITH SPACES'))
|
||||||
eq({
|
eq({
|
||||||
{ '3', 'some other man' },
|
{ '3', 'some other man' },
|
||||||
@ -254,8 +255,8 @@ describe(':Man', function()
|
|||||||
{ 'n', 'some_other_man' },
|
{ 'n', 'some_other_man' },
|
||||||
}, get_search_history('n some other man'))
|
}, get_search_history('n some other man'))
|
||||||
eq({
|
eq({
|
||||||
{ vim.NIL, '123some other man' },
|
{ '', '123some other man' },
|
||||||
{ vim.NIL, '123some_other_man' },
|
{ '', '123some_other_man' },
|
||||||
}, get_search_history('123some other man'))
|
}, get_search_history('123some other man'))
|
||||||
eq({
|
eq({
|
||||||
{ '1', 'other_man' },
|
{ '1', 'other_man' },
|
||||||
@ -264,10 +265,11 @@ describe(':Man', function()
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
it('can complete', function()
|
it('can complete', function()
|
||||||
|
t.skip(t.is_os('mac') and t.is_arch('x86_64'), 'not supported on intel mac')
|
||||||
eq(
|
eq(
|
||||||
true,
|
true,
|
||||||
exec_lua(function()
|
exec_lua(function()
|
||||||
return #require('man').man_complete('f', 'Man f') > 0
|
return #require('man').man_complete('f', 'Man g') > 0
|
||||||
end)
|
end)
|
||||||
)
|
)
|
||||||
end)
|
end)
|
||||||
|
@ -94,46 +94,6 @@ describe('ui mode_change event', function()
|
|||||||
}
|
}
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- oldtest: Test_indent_norm_with_gq()
|
|
||||||
it('is restored to Normal mode after "gq" indents using :normal #12309', function()
|
|
||||||
screen:try_resize(60, 6)
|
|
||||||
n.exec([[
|
|
||||||
func Indent()
|
|
||||||
exe "normal! \<Ignore>"
|
|
||||||
return 0
|
|
||||||
endfunc
|
|
||||||
|
|
||||||
setlocal indentexpr=Indent()
|
|
||||||
call setline(1, [repeat('a', 80), repeat('b', 80)])
|
|
||||||
]])
|
|
||||||
|
|
||||||
feed('ggVG')
|
|
||||||
screen:expect {
|
|
||||||
grid = [[
|
|
||||||
{17:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}|
|
|
||||||
{17:aaaaaaaaaaaaaaaaaaaa} |
|
|
||||||
^b{17:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb}|
|
|
||||||
{17:bbbbbbbbbbbbbbbbbbbb} |
|
|
||||||
{1:~ }|
|
|
||||||
{5:-- VISUAL LINE --} |
|
|
||||||
]],
|
|
||||||
mode = 'visual',
|
|
||||||
}
|
|
||||||
|
|
||||||
feed('gq')
|
|
||||||
screen:expect {
|
|
||||||
grid = [[
|
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
|
|
||||||
aaaaaaaaaaaaaaaaaaaa |
|
|
||||||
^bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb|
|
|
||||||
bbbbbbbbbbbbbbbbbbbb |
|
|
||||||
{1:~ }|
|
|
||||||
|
|
|
||||||
]],
|
|
||||||
mode = 'normal',
|
|
||||||
}
|
|
||||||
end)
|
|
||||||
|
|
||||||
it('works in insert mode', function()
|
it('works in insert mode', function()
|
||||||
feed('i')
|
feed('i')
|
||||||
screen:expect {
|
screen:expect {
|
||||||
|
@ -5561,71 +5561,6 @@ describe('builtin popupmenu', function()
|
|||||||
]])
|
]])
|
||||||
feed('<C-E><ESC>')
|
feed('<C-E><ESC>')
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- oldtest: Test_pum_matchins_highlight()
|
|
||||||
it('with ComplMatchIns highlight', function()
|
|
||||||
exec([[
|
|
||||||
func Omni_test(findstart, base)
|
|
||||||
if a:findstart
|
|
||||||
return col(".")
|
|
||||||
endif
|
|
||||||
return [#{word: "foo"}, #{word: "bar"}, #{word: "你好"}]
|
|
||||||
endfunc
|
|
||||||
set omnifunc=Omni_test
|
|
||||||
hi ComplMatchIns guifg=red
|
|
||||||
]])
|
|
||||||
|
|
||||||
feed('Sαβγ <C-X><C-O>')
|
|
||||||
screen:expect([[
|
|
||||||
αβγ {8:foo}^ |
|
|
||||||
{1:~ }{s: foo }{1: }|
|
|
||||||
{1:~ }{n: bar }{1: }|
|
|
||||||
{1:~ }{n: 你好 }{1: }|
|
|
||||||
{1:~ }|*15
|
|
||||||
{2:-- }{5:match 1 of 3} |
|
|
||||||
]])
|
|
||||||
feed('<C-E><Esc>')
|
|
||||||
|
|
||||||
feed('Sαβγ <C-X><C-O><C-N>')
|
|
||||||
screen:expect([[
|
|
||||||
αβγ {8:bar}^ |
|
|
||||||
{1:~ }{n: foo }{1: }|
|
|
||||||
{1:~ }{s: bar }{1: }|
|
|
||||||
{1:~ }{n: 你好 }{1: }|
|
|
||||||
{1:~ }|*15
|
|
||||||
{2:-- }{5:match 2 of 3} |
|
|
||||||
]])
|
|
||||||
feed('<C-E><Esc>')
|
|
||||||
|
|
||||||
feed('Sαβγ <C-X><C-O><C-N><C-N>')
|
|
||||||
screen:expect([[
|
|
||||||
αβγ {8:你好}^ |
|
|
||||||
{1:~ }{n: foo }{1: }|
|
|
||||||
{1:~ }{n: bar }{1: }|
|
|
||||||
{1:~ }{s: 你好 }{1: }|
|
|
||||||
{1:~ }|*15
|
|
||||||
{2:-- }{5:match 3 of 3} |
|
|
||||||
]])
|
|
||||||
feed('<C-E><Esc>')
|
|
||||||
|
|
||||||
-- restore after accept
|
|
||||||
feed('Sαβγ <C-X><C-O><C-Y>')
|
|
||||||
screen:expect([[
|
|
||||||
αβγ foo^ |
|
|
||||||
{1:~ }|*18
|
|
||||||
{2:-- INSERT --} |
|
|
||||||
]])
|
|
||||||
feed('<Esc>')
|
|
||||||
|
|
||||||
-- restore after cancel completion
|
|
||||||
feed('Sαβγ <C-X><C-O><Space>')
|
|
||||||
screen:expect([[
|
|
||||||
αβγ foo ^ |
|
|
||||||
{1:~ }|*18
|
|
||||||
{2:-- INSERT --} |
|
|
||||||
]])
|
|
||||||
feed('<Esc>')
|
|
||||||
end)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1,8 +1,5 @@
|
|||||||
" Test for various indent options
|
" Test for various indent options
|
||||||
|
|
||||||
source shared.vim
|
|
||||||
source check.vim
|
|
||||||
|
|
||||||
func Test_preserveindent()
|
func Test_preserveindent()
|
||||||
new
|
new
|
||||||
" Test for autoindent copying indent from the previous line
|
" Test for autoindent copying indent from the previous line
|
||||||
@ -306,50 +303,4 @@ func Test_indent_overflow_count2()
|
|||||||
close!
|
close!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
" Test that mouse shape is restored to Normal mode after using "gq" when
|
|
||||||
" 'indentexpr' executes :normal.
|
|
||||||
func Test_indent_norm_with_gq()
|
|
||||||
CheckFeature mouseshape
|
|
||||||
CheckCanRunGui
|
|
||||||
|
|
||||||
let lines =<< trim END
|
|
||||||
func Indent()
|
|
||||||
exe "normal! \<Ignore>"
|
|
||||||
return 0
|
|
||||||
endfunc
|
|
||||||
|
|
||||||
setlocal indentexpr=Indent()
|
|
||||||
END
|
|
||||||
call writefile(lines, 'Xindentexpr.vim', 'D')
|
|
||||||
|
|
||||||
let lines =<< trim END
|
|
||||||
vim9script
|
|
||||||
var mouse_shapes = []
|
|
||||||
|
|
||||||
setline(1, [repeat('a', 80), repeat('b', 80)])
|
|
||||||
|
|
||||||
feedkeys('ggVG')
|
|
||||||
timer_start(50, (_) => {
|
|
||||||
mouse_shapes += [getmouseshape()]
|
|
||||||
timer_start(50, (_) => {
|
|
||||||
feedkeys('gq')
|
|
||||||
timer_start(50, (_) => {
|
|
||||||
mouse_shapes += [getmouseshape()]
|
|
||||||
timer_start(50, (_) => {
|
|
||||||
writefile(mouse_shapes, 'Xmouseshapes')
|
|
||||||
quit!
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
END
|
|
||||||
call writefile(lines, 'Xmouseshape.vim', 'D')
|
|
||||||
|
|
||||||
call RunVim([], [], "-g -S Xindentexpr.vim -S Xmouseshape.vim")
|
|
||||||
call WaitForAssert({-> assert_equal(['rightup-arrow', 'arrow'],
|
|
||||||
\ readfile('Xmouseshapes'))}, 300)
|
|
||||||
|
|
||||||
call delete('Xmouseshapes')
|
|
||||||
endfunc
|
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@ -1713,49 +1713,4 @@ func Test_pum_keep_select()
|
|||||||
call StopVimInTerminal(buf)
|
call StopVimInTerminal(buf)
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_pum_matchins_highlight()
|
|
||||||
CheckScreendump
|
|
||||||
let lines =<< trim END
|
|
||||||
func Omni_test(findstart, base)
|
|
||||||
if a:findstart
|
|
||||||
return col(".")
|
|
||||||
endif
|
|
||||||
return [#{word: "foo"}, #{word: "bar"}, #{word: "你好"}]
|
|
||||||
endfunc
|
|
||||||
set omnifunc=Omni_test
|
|
||||||
hi ComplMatchIns ctermfg=red
|
|
||||||
END
|
|
||||||
call writefile(lines, 'Xscript', 'D')
|
|
||||||
let buf = RunVimInTerminal('-S Xscript', {})
|
|
||||||
|
|
||||||
call TermWait(buf)
|
|
||||||
call term_sendkeys(buf, "Sαβγ \<C-X>\<C-O>")
|
|
||||||
call VerifyScreenDump(buf, 'Test_pum_matchins_01', {})
|
|
||||||
call term_sendkeys(buf, "\<C-E>\<Esc>")
|
|
||||||
|
|
||||||
call TermWait(buf)
|
|
||||||
call term_sendkeys(buf, "Sαβγ \<C-X>\<C-O>\<C-N>")
|
|
||||||
call VerifyScreenDump(buf, 'Test_pum_matchins_02', {})
|
|
||||||
call term_sendkeys(buf, "\<C-E>\<Esc>")
|
|
||||||
|
|
||||||
call TermWait(buf)
|
|
||||||
call term_sendkeys(buf, "Sαβγ \<C-X>\<C-O>\<C-N>\<C-N>")
|
|
||||||
call VerifyScreenDump(buf, 'Test_pum_matchins_03', {})
|
|
||||||
call term_sendkeys(buf, "\<C-E>\<Esc>")
|
|
||||||
|
|
||||||
" restore after accept
|
|
||||||
call TermWait(buf)
|
|
||||||
call term_sendkeys(buf, "Sαβγ \<C-X>\<C-O>\<C-Y>")
|
|
||||||
call VerifyScreenDump(buf, 'Test_pum_matchins_04', {})
|
|
||||||
call term_sendkeys(buf, "\<C-E>\<Esc>")
|
|
||||||
|
|
||||||
" restore after cancel completion
|
|
||||||
call TermWait(buf)
|
|
||||||
call term_sendkeys(buf, "Sαβγ \<C-X>\<C-O>\<Space>")
|
|
||||||
call VerifyScreenDump(buf, 'Test_pum_matchins_05', {})
|
|
||||||
call term_sendkeys(buf, "\<C-E>\<Esc>")
|
|
||||||
|
|
||||||
call StopVimInTerminal(buf)
|
|
||||||
endfunc
|
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@ -59,8 +59,7 @@ func Test_window_preview_terminal()
|
|||||||
CheckFeature quickfix
|
CheckFeature quickfix
|
||||||
" CheckFeature terminal
|
" CheckFeature terminal
|
||||||
|
|
||||||
" term ++curwin
|
term " ++curwin
|
||||||
term
|
|
||||||
const buf_num = bufnr('$')
|
const buf_num = bufnr('$')
|
||||||
call assert_equal(1, winnr('$'))
|
call assert_equal(1, winnr('$'))
|
||||||
exe 'pbuffer' . buf_num
|
exe 'pbuffer' . buf_num
|
||||||
|
Loading…
Reference in New Issue
Block a user