mirror of
https://github.com/neovim/neovim.git
synced 2024-12-20 03:05:11 -07:00
'keywordprg': support ex commands
- new feature: if the first character of 'keywordprg' is ":", the command is invoked as a Vim ex-command prefixed with [count]. - change default 'keywordprg' to :Man
This commit is contained in:
parent
481049e0c9
commit
998d0ffc09
@ -3877,18 +3877,20 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
The 'keymodel' option is set by the |:behave| command.
|
||||
|
||||
*'keywordprg'* *'kp'*
|
||||
'keywordprg' 'kp' string (default "man" or "man -s", DOS: ":help")
|
||||
'keywordprg' 'kp' string (default ":Man", Windows: ":help")
|
||||
global or local to buffer |global-local|
|
||||
Program to use for the |K| command. Environment variables are
|
||||
expanded |:set_env|. ":help" may be used to access the Vim internal
|
||||
help. (Note that previously setting the global option to the empty
|
||||
value did this, which is now deprecated.)
|
||||
When "man" is used, Vim will automatically translate a count for the
|
||||
"K" command to a section number. Also for "man -s", in which case the
|
||||
"-s" is removed when there is no count.
|
||||
When the first character is ":", the command is invoked as a Vim
|
||||
command prefixed with [count]. {Nvim}
|
||||
When "man" or "man -s" is used, Vim will automatically translate
|
||||
a [count] for the "K" command to a section number.
|
||||
See |option-backslash| about including spaces and backslashes.
|
||||
Example: >
|
||||
:set keywordprg=man\ -s
|
||||
:set keywordprg=:Man
|
||||
< This option cannot be set from a |modeline| or in the |sandbox|, for
|
||||
security reasons.
|
||||
|
||||
|
@ -542,7 +542,7 @@ which it was defined is reported.
|
||||
{not available when compiled without the |+eval| feature}
|
||||
|
||||
*K*
|
||||
K Run a program to lookup the keyword under the
|
||||
[count]K Run a program to lookup the keyword under the
|
||||
cursor. The name of the program is given with the
|
||||
'keywordprg' (kp) option (default is "man"). The
|
||||
keyword is formed of letters, numbers and the
|
||||
@ -550,19 +550,18 @@ K Run a program to lookup the keyword under the
|
||||
right of the cursor is used. The same can be done
|
||||
with the command >
|
||||
:!{program} {keyword}
|
||||
< There is an example of a program to use in the tools
|
||||
directory of Vim. It is called 'ref' and does a
|
||||
simple spelling check.
|
||||
Special cases:
|
||||
< Special cases:
|
||||
- If 'keywordprg' begins with ":" it is invoked as
|
||||
a Vim command with [count].
|
||||
- If 'keywordprg' is empty, the ":help" command is
|
||||
used. It's a good idea to include more characters
|
||||
in 'iskeyword' then, to be able to find more help.
|
||||
- When 'keywordprg' is equal to "man", a count before
|
||||
"K" is inserted after the "man" command and before
|
||||
the keyword. For example, using "2K" while the
|
||||
cursor is on "mkdir", results in: >
|
||||
- When 'keywordprg' is equal to "man", a [count]
|
||||
before "K" is inserted after the "man" command and
|
||||
before the keyword. For example, using "2K" while
|
||||
the cursor is on "mkdir", results in: >
|
||||
!man 2 mkdir
|
||||
< - When 'keywordprg' is equal to "man -s", a count
|
||||
< - When 'keywordprg' is equal to "man -s", a [count]
|
||||
before "K" is inserted after the "-s". If there is
|
||||
no count, the "-s" is removed.
|
||||
|
||||
|
@ -120,7 +120,7 @@ func <SID>GetPage(...)
|
||||
let sect = ""
|
||||
endif
|
||||
if s:FindPage(sect, page) == 0
|
||||
echo "\nCannot find a '".page."'."
|
||||
echo "\nNo manual entry for '".page."'."
|
||||
return
|
||||
endif
|
||||
exec "let s:man_tag_buf_".s:man_tag_depth." = ".bufnr("%")
|
||||
|
@ -4213,18 +4213,12 @@ void do_nv_ident(int c1, int c2)
|
||||
static void nv_ident(cmdarg_T *cap)
|
||||
{
|
||||
char_u *ptr = NULL;
|
||||
char_u *buf;
|
||||
char_u *newbuf;
|
||||
char_u *p;
|
||||
char_u *kp; /* value of 'keywordprg' */
|
||||
bool kp_help; /* 'keywordprg' is ":help" */
|
||||
size_t n = 0; /* init for GCC */
|
||||
int cmdchar;
|
||||
bool g_cmd; /* "g" command */
|
||||
bool tag_cmd = false;
|
||||
char_u *aux_ptr;
|
||||
bool isman;
|
||||
bool isman_s;
|
||||
|
||||
if (cap->cmdchar == 'g') { /* "g*", "g#", "g]" and "gCTRL-]" */
|
||||
cmdchar = cap->nchar;
|
||||
@ -4259,10 +4253,10 @@ static void nv_ident(cmdarg_T *cap)
|
||||
/* Allocate buffer to put the command in. Inserting backslashes can
|
||||
* double the length of the word. p_kp / curbuf->b_p_kp could be added
|
||||
* and some numbers. */
|
||||
kp = (*curbuf->b_p_kp == NUL ? p_kp : curbuf->b_p_kp);
|
||||
kp_help = (*kp == NUL || STRCMP(kp, ":he") == 0
|
||||
|| STRCMP(kp, ":help") == 0);
|
||||
buf = xmalloc(n * 2 + 30 + STRLEN(kp));
|
||||
char_u *kp = (*curbuf->b_p_kp == NUL ? p_kp : curbuf->b_p_kp); //'keywordprg'
|
||||
assert(*kp != NUL); //option.c::do_set() should default to ":help" if empty.
|
||||
bool kp_ex = (*kp == ':'); //'keywordprg' is an ex command
|
||||
char *buf = xmalloc(n * 2 + 30 + STRLEN(kp));
|
||||
buf[0] = NUL;
|
||||
|
||||
switch (cmdchar) {
|
||||
@ -4283,9 +4277,13 @@ static void nv_ident(cmdarg_T *cap)
|
||||
break;
|
||||
|
||||
case 'K':
|
||||
if (kp_help)
|
||||
STRCPY(buf, "he! ");
|
||||
else {
|
||||
if (kp_ex) {
|
||||
if (cap->count0 != 0) { // Send the count to the ex command.
|
||||
sprintf(buf, "%" PRId64, (int64_t)(cap->count0));
|
||||
}
|
||||
STRCAT(buf, kp);
|
||||
STRCAT(buf, " ");
|
||||
} else {
|
||||
/* An external command will probably use an argument starting
|
||||
* with "-" as an option. To avoid trouble we skip the "-". */
|
||||
while (*ptr == '-' && n > 0) {
|
||||
@ -4300,10 +4298,10 @@ static void nv_ident(cmdarg_T *cap)
|
||||
|
||||
/* When a count is given, turn it into a range. Is this
|
||||
* really what we want? */
|
||||
isman = (STRCMP(kp, "man") == 0);
|
||||
isman_s = (STRCMP(kp, "man -s") == 0);
|
||||
bool isman = (STRCMP(kp, "man") == 0);
|
||||
bool isman_s = (STRCMP(kp, "man -s") == 0);
|
||||
if (cap->count0 != 0 && !(isman || isman_s))
|
||||
sprintf((char *)buf, ".,.+%" PRId64, (int64_t)(cap->count0 - 1));
|
||||
sprintf(buf, ".,.+%" PRId64, (int64_t)(cap->count0 - 1));
|
||||
|
||||
STRCAT(buf, "! ");
|
||||
if (cap->count0 == 0 && isman_s)
|
||||
@ -4312,7 +4310,7 @@ static void nv_ident(cmdarg_T *cap)
|
||||
STRCAT(buf, kp);
|
||||
STRCAT(buf, " ");
|
||||
if (cap->count0 != 0 && (isman || isman_s)) {
|
||||
sprintf((char *)buf + STRLEN(buf), "%" PRId64, (int64_t)cap->count0);
|
||||
sprintf(buf + STRLEN(buf), "%" PRId64, (int64_t)cap->count0);
|
||||
STRCAT(buf, " ");
|
||||
}
|
||||
}
|
||||
@ -4334,19 +4332,19 @@ static void nv_ident(cmdarg_T *cap)
|
||||
if (g_cmd)
|
||||
STRCPY(buf, "tj ");
|
||||
else
|
||||
sprintf((char *)buf, "%" PRId64 "ta ", (int64_t)cap->count0);
|
||||
sprintf(buf, "%" PRId64 "ta ", (int64_t)cap->count0);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Now grab the chars in the identifier
|
||||
*/
|
||||
if (cmdchar == 'K' && !kp_help) {
|
||||
if (cmdchar == 'K' && !kp_ex) {
|
||||
/* Escape the argument properly for a shell command */
|
||||
ptr = vim_strnsave(ptr, n);
|
||||
p = vim_strsave_shellescape(ptr, true, true);
|
||||
xfree(ptr);
|
||||
newbuf = (char_u *)xrealloc(buf, STRLEN(buf) + STRLEN(p) + 1);
|
||||
char *newbuf = xrealloc(buf, STRLEN(buf) + STRLEN(p) + 1);
|
||||
buf = newbuf;
|
||||
STRCAT(buf, p);
|
||||
xfree(p);
|
||||
@ -4364,7 +4362,7 @@ static void nv_ident(cmdarg_T *cap)
|
||||
} else
|
||||
aux_ptr = (char_u *)"\\|\"\n*?[";
|
||||
|
||||
p = buf + STRLEN(buf);
|
||||
p = (char_u *)buf + STRLEN(buf);
|
||||
while (n-- > 0) {
|
||||
/* put a backslash before \ and some others */
|
||||
if (vim_strchr(aux_ptr, *ptr) != NULL)
|
||||
@ -4391,10 +4389,10 @@ static void nv_ident(cmdarg_T *cap)
|
||||
STRCAT(buf, "\\>");
|
||||
/* put pattern in search history */
|
||||
init_history();
|
||||
add_to_history(HIST_SEARCH, buf, true, NUL);
|
||||
(void)normal_search(cap, cmdchar == '*' ? '/' : '?', buf, 0);
|
||||
add_to_history(HIST_SEARCH, (char_u *)buf, true, NUL);
|
||||
(void)normal_search(cap, cmdchar == '*' ? '/' : '?', (char_u *)buf, 0);
|
||||
} else
|
||||
do_cmdline_cmd((char *)buf);
|
||||
do_cmdline_cmd(buf);
|
||||
|
||||
xfree(buf);
|
||||
}
|
||||
|
@ -1329,7 +1329,7 @@ return {
|
||||
expand=true,
|
||||
varname='p_kp',
|
||||
defaults={
|
||||
if_true={vi="man -s"},
|
||||
if_true={vi=":Man"},
|
||||
}
|
||||
},
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user