📄 ex_docmd.c
字号:
*/
case CMD_doautoall:
do_autoall(ea.arg);
break;
/*
* Apply the automatic commands to the current buffer.
*/
case CMD_doautocmd:
(void)do_doautocmd(ea.arg, TRUE);
do_modelines();
break;
#endif
case CMD_abbreviate:
case CMD_noreabbrev:
case CMD_unabbreviate:
case CMD_cabbrev:
case CMD_cnoreabbrev:
case CMD_cunabbrev:
case CMD_iabbrev:
case CMD_inoreabbrev:
case CMD_iunabbrev:
do_exmap(&ea, TRUE); /* almost the same as mapping */
break;
case CMD_map:
case CMD_nmap:
case CMD_vmap:
case CMD_omap:
case CMD_cmap:
case CMD_imap:
case CMD_noremap:
case CMD_nnoremap:
case CMD_vnoremap:
case CMD_onoremap:
case CMD_cnoremap:
case CMD_inoremap:
/*
* If we are sourcing .exrc or .vimrc in current directory we
* print the mappings for security reasons.
*/
if (secure)
{
secure = 2;
msg_outtrans(ea.cmd);
msg_putchar('\n');
}
case CMD_unmap:
case CMD_nunmap:
case CMD_vunmap:
case CMD_ounmap:
case CMD_cunmap:
case CMD_iunmap:
do_exmap(&ea, FALSE);
break;
case CMD_mapclear:
case CMD_nmapclear:
case CMD_vmapclear:
case CMD_omapclear:
case CMD_cmapclear:
case CMD_imapclear:
map_clear(ea.cmd, ea.forceit, FALSE);
break;
case CMD_abclear:
case CMD_iabclear:
case CMD_cabclear:
map_clear(ea.cmd, TRUE, TRUE);
break;
#ifdef USE_GUI
case CMD_menu: case CMD_noremenu: case CMD_unmenu:
case CMD_amenu: case CMD_anoremenu: case CMD_aunmenu:
case CMD_nmenu: case CMD_nnoremenu: case CMD_nunmenu:
case CMD_vmenu: case CMD_vnoremenu: case CMD_vunmenu:
case CMD_omenu: case CMD_onoremenu: case CMD_ounmenu:
case CMD_imenu: case CMD_inoremenu: case CMD_iunmenu:
case CMD_cmenu: case CMD_cnoremenu: case CMD_cunmenu:
case CMD_tmenu: case CMD_tunmenu:
do_menu(&ea);
break;
#endif
case CMD_display:
case CMD_registers:
do_dis(ea.arg);
break;
case CMD_help:
do_help(&ea);
break;
case CMD_version:
do_version(ea.arg);
break;
case CMD_winsize:
do_winsize(ea.arg);
break;
case CMD_delete:
case CMD_yank:
case CMD_rshift:
case CMD_lshift:
do_exops(&ea);
break;
case CMD_put:
/* ":0put" works like ":1put!". */
if (ea.line2 == 0)
{
ea.line2 = 1;
ea.forceit = TRUE;
}
curwin->w_cursor.lnum = ea.line2;
do_put(ea.regname, ea.forceit ? BACKWARD : FORWARD, -1L, 0);
break;
case CMD_t:
case CMD_copy:
case CMD_move:
do_copymove(&ea);
break;
case CMD_and: /* :& */
case CMD_tilde: /* :~ */
case CMD_substitute: /* :s */
do_sub(&ea);
break;
case CMD_smagic:
i = p_magic;
p_magic = TRUE;
do_sub(&ea);
p_magic = i;
break;
case CMD_snomagic:
i = p_magic;
p_magic = FALSE;
do_sub(&ea);
p_magic = i;
break;
case CMD_join:
do_exjoin(&ea);
break;
case CMD_global:
if (ea.forceit)
*ea.cmd = 'v';
case CMD_vglobal:
do_glob(&ea);
break;
case CMD_star: /* :[addr]*r */
case CMD_at: /* :[addr]@r */
do_exat(&ea);
break;
case CMD_bang:
do_bang(ea.addr_count, ea.line1, ea.line2,
ea.forceit, ea.arg, TRUE, TRUE);
break;
case CMD_undo:
u_undo(1);
break;
case CMD_redo:
u_redo(1);
break;
case CMD_source:
#ifdef USE_BROWSE
if (browse)
{
char_u *fname = NULL;
fname = do_browse(FALSE, (char_u *)"Run Macro",
NULL, NULL, ea.arg, BROWSE_FILTER_MACROS, curbuf);
if (fname != NULL)
{
cmd_source(fname, ea.forceit);
vim_free(fname);
}
break;
}
#endif /* USE_BROWSE */
if (*ea.arg == NUL)
emsg(e_argreq);
else
cmd_source(ea.arg, ea.forceit);
break;
#ifdef VIMINFO
case CMD_rviminfo:
p = p_viminfo;
if (*p_viminfo == NUL)
p_viminfo = (char_u *)"'100";
if (read_viminfo(ea.arg, TRUE, TRUE, ea.forceit) == FAIL)
EMSG("Cannot open viminfo file for reading");
p_viminfo = p;
break;
case CMD_wviminfo:
p = p_viminfo;
if (*p_viminfo == NUL)
p_viminfo = (char_u *)"'100";
write_viminfo(ea.arg, ea.forceit);
p_viminfo = p;
break;
#endif /* VIMINFO */
case CMD_redir:
do_redir(&ea);
break;
case CMD_mksession:
do_mkrc(&ea, (char_u *)SESSION_FILE);
break;
case CMD_mkvimrc:
do_mkrc(&ea, (char_u *)VIMRC_FILE);
break;
case CMD_mkexrc:
do_mkrc(&ea, (char_u *)EXRC_FILE);
break;
#ifdef QUICKFIX
case CMD_cc:
qf_jump(0, ea.addr_count ? (int)ea.line2 : 0, ea.forceit);
break;
case CMD_cfile:
do_cfile(&ea);
break;
case CMD_clist:
qf_list(ea.forceit);
break;
case CMD_crewind:
qf_jump(0, ea.addr_count ? (int)ea.line2 : 1, ea.forceit);
break;
case CMD_clast:
qf_jump(0, ea.addr_count ? (int)ea.line2 : 32767, ea.forceit);
break;
case CMD_cnext:
qf_jump(FORWARD, ea.addr_count ? (int)ea.line2 : 1, ea.forceit);
break;
case CMD_colder:
qf_older(ea.addr_count ? (int)ea.line2 : 1);
break;
case CMD_cnewer:
qf_newer(ea.addr_count ? (int)ea.line2 : 1);
break;
case CMD_cNext:
case CMD_cprevious:
qf_jump(BACKWARD, ea.addr_count ? (int)ea.line2 : 1,
ea.forceit);
break;
#endif
#ifdef USER_COMMANDS
case CMD_USER:
do_ucmd(USER_CMD(ea.useridx), &ea);
break;
case CMD_command:
do_command(&ea);
break;
case CMD_comclear:
do_comclear();
break;
case CMD_delcommand:
do_delcommand(&ea);
break;
#endif
case CMD_cquit:
getout(1); /* this does not always pass on the exit
code to the Manx compiler. why? */
case CMD_mark:
case CMD_k:
do_setmark(&ea);
break;
#ifdef EX_EXTRA
case CMD_center:
case CMD_right:
case CMD_left:
do_align(&ea);
break;
case CMD_retab:
do_retab(&ea);
break;
case CMD_normal:
do_normal(&ea);
break;
#endif
#ifdef QUICKFIX
case CMD_grep:
do_make(ea.arg, p_gefm);
break;
case CMD_make:
do_make(ea.arg, p_efm);
break;
#endif
#ifdef FIND_IN_PATH
case CMD_isearch:
case CMD_dsearch:
errormsg = do_findpat(&ea, ACTION_SHOW);
break;
case CMD_ilist:
case CMD_dlist:
errormsg = do_findpat(&ea, ACTION_SHOW_ALL);
break;
case CMD_ijump:
case CMD_djump:
errormsg = do_findpat(&ea, ACTION_GOTO);
break;
case CMD_isplit:
case CMD_dsplit:
errormsg = do_findpat(&ea, ACTION_SPLIT);
break;
#endif
#ifdef SYNTAX_HL
case CMD_syntax:
do_syntax(&ea, cmdlinep);
break;
#endif
case CMD_highlight:
do_highlight(ea.arg, ea.forceit, FALSE);
break;
#ifdef WANT_EVAL
case CMD_echo:
case CMD_echon:
do_echo(&ea, ea.cmdidx == CMD_echo);
break;
case CMD_echohl:
do_echohl(ea.arg);
break;
case CMD_execute:
do_execute(&ea, getline, cookie);
break;
case CMD_call:
do_call(&ea);
break;
case CMD_if:
errormsg = do_if(&ea, cstack);
break;
case CMD_elseif:
case CMD_else:
errormsg = do_else(&ea, cstack);
break;
case CMD_endif:
did_endif = TRUE;
if (cstack->cs_idx < 0
|| (cstack->cs_flags[cstack->cs_idx] & CSF_WHILE))
errormsg = (char_u *)":endif without :if";
else
--cstack->cs_idx;
break;
case CMD_while:
errormsg = do_while(&ea, cstack);
break;
case CMD_continue:
errormsg = do_continue(cstack);
break;
case CMD_break:
errormsg = do_break(cstack);
break;
case CMD_endwhile:
errormsg = do_endwhile(cstack);
break;
case CMD_let:
do_let(&ea);
break;
case CMD_unlet:
do_unlet(ea.arg, ea.forceit);
break;
case CMD_function:
do_function(&ea, getline, cookie);
break;
case CMD_delfunction:
do_delfunction(ea.arg);
break;
case CMD_return:
do_return(&ea);
break;
case CMD_endfunction:
EMSG(":endfunction not inside a function");
break;
#endif /* WANT_EVAL */
case CMD_insert:
do_append(ea.line2 - 1, getline, cookie);
ex_no_reprint = TRUE;
break;
case CMD_append:
do_append(ea.line2, getline, cookie);
ex_no_reprint = TRUE;
break;
case CMD_change:
do_change(ea.line1, ea.line2, getline, cookie);
ex_no_reprint = TRUE;
break;
case CMD_z:
do_z(ea.line2, ea.arg);
ex_no_reprint = TRUE;
break;
case CMD_intro:
do_intro();
break;
#ifdef HAVE_PERL_INTERP
case CMD_perl:
do_perl(&ea);
break;
case CMD_perldo:
do_perldo(&ea);
break;
#endif
#ifdef HAVE_PYTHON
case CMD_python:
do_python(&ea);
break;
case CMD_pyfile:
do_pyfile(&ea);
break;
#endif
#ifdef HAVE_TCL
case CMD_tcl:
do_tcl(&ea);
break;
case CMD_tcldo:
do_tcldo(&ea);
break;
case CMD_tclfile:
do_tclfile(&ea);
break;
#endif
#ifdef USE_SNIFF
case CMD_sniff:
do_sniff(ea.arg);
break;
#endif
case CMD_nohlsearch:
#ifdef EXTRA_SEARCH
no_hlsearch = TRUE;
redraw_all_later(NOT_VALID);
#endif
break;
default:
/* Illegal commands have already been handled */
errormsg = (char_u *)"Sorry, this command is not implemented";
}
doend:
if (curwin->w_cursor.lnum == 0) /* can happen with zero line number */
curwin->w_cursor.lnum = 1;
if (errormsg != NULL && *errormsg != NUL && !did_emsg)
{
emsg(errormsg);
if (sourcing)
{
MSG_PUTS(": ");
msg_outtrans(*cmdlinep);
}
}
if (ea.nextcmd && *ea.nextcmd == NUL) /* not really a next command */
ea.nextcmd = NULL;
return ea.nextcmd;
}
/*
* This is all pretty much copied from do_one_cmd(), with all the extra stuff
* we don't need/want deleted. Maybe this could be done better if we didn't
* repeat all this stuff. The only problem is that they may not stay perfectly
* compatible with each other, but then the command line syntax probably won't
* change that much -- webb.
*/
char_u *
set_one_cmd_context(buff)
char_u *buff; /* buffer for command string */
{
char_u *p;
char_u *cmd, *arg;
int i = 0;
CMDIDX cmdidx;
long argt = 0;
#ifdef USER_COMMANDS
int compl = EXPAND_NOTHING;
#endif
char_u delim;
int forceit = FALSE;
int usefilter = FALSE; /* filter instead of file name */
expand_pattern = buff;
expand_context = EXPAND_COMMANDS; /* Default until we get past command */
expand_set_path = FALSE;
/*
* 2. skip comment lines and leading space, colons or bars
*/
for (cmd = buff; vim_strchr((char_u *)" \t:|", *cmd) != NULL; cmd++)
;
expand_pattern = cmd;
if (*cmd == NUL)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -