[英]Using normal-mode motions in command-line mode in Vim
在命令行模式下可以进行模态编辑吗?
一些例子:
!ls ~/foo/bar
我想db
删除barls
更改为mv
并跳回 $默认情况下,您可以在 Vim 命令行上按Control + f
(或以其他方式查看set cedit
),这会打开命令行窗口,您可以在其中使用普通模式 Vim 编辑键编辑命令。 Enter
将运行命令或Control + c
将返回到标准命令行。
因此,在您的具体示例中,您可以在 Vim 命令行上按Control + f
然后按db
,它会执行您想要的操作。
当我必须执行更复杂的编辑命令时,我会使用上述方法,因为我对 Vim 编辑键的熟悉程度比对替代方法的熟悉程度更高。 我还发现普通模式 vim 键更强大。
有关更多信息,请参阅:help c_ctrl-f
。
在vim的命令行模式下: <ctrl-w>
删除一个单词
在正常模式下: q:
转到命令历史记录(可以用 vim 命令编辑)
有关更多命令,请参阅:help cmdline-editing
和:help cmdline-window
。
<Esc> abandon command-line without executing it
CTRL-C abandon command-line without executing it
CTRL-B cursor to begin of command-line
CTRL-E cursor to end of command-line
CTRL-F opens the command-line window (unless a different key is specified in 'cedit')
CTRL-H delete the character in front of the cursor (same as <Backspace>)
CTRL-W delete the word in front of the cursor
CTRL-U delete all characters in front of the cursor
CTRL-P recall previous command-line from history (that matches pattern in front of the cursor)
CTRL-N recall next command-line from history (that matches pattern in front of the cursor)
<Up> recall previous command-line from history (that matches pattern in front of the cursor)
<Down> recall next command-line from history (that matches pattern in front of the cursor)
<S-Up> recall previous command-line from history
<S-Down> recall next command-line from history
<PageUp> recall previous command-line from history
<PageDown> recall next command-line from history
<S-Left> cursor one word left
<C-Left> cursor one word left
<S-Right> cursor one word right
<C-Right> cursor one word right
<LeftMouse> cursor at mouse click
参考:: :help ex-edit-index
(抱歉与旧答案重叠。希望这个完整的°,结构化概述仍然有用。)
° 截至 2014 年 - 从那时起可能添加了新的键盘快捷键
在 Vim 中搜索:help cmdline-editing
。
它将给出在命令行模式下工作的快捷方式列表。
您当前问题的摘录:
CTRL-B or <Home> *c_CTRL-B* *c_<Home>*
cursor to beginning of command-line
CTRL-E or <End> *c_CTRL-E* *c_<End>*
cursor to end of command-line
<S-Left> or <C-Left> *c_<C-Left>*
cursor one WORD left
*c_<S-Right>*
<S-Right> or <C-Right> *c_<C-Right>*
cursor one WORD right
或使用q:
正如 Rene 提到的那样,它允许您在不同模式下编辑以前键入的命令。
emacscommandline通过添加 Emacs 风格的映射(如在 Bash shell 中)使命令行模式的行为更像 Unix 命令行。 一些映射只是映射现有的 vim 命令,但其余的实现了本机不可用的功能。
conomode.vim在命令行之上实现了一种普通模式(“Cmdline-Normal 模式”)。 目的类似于 cmdline-window (q:),但导航和编辑可以就地完成。 当然,cmdline-window 更强大。
Conomode 并没有取代 Vim 的原生 emacs 风格的命令行编辑,它只是增加了一个键:CTRL-O(见下文)。
- 用 c_ 输入(在命令行模式下按 CTRL-O)
- 模式指示符是一个冒号“:”,随着光标移动,隐藏在它下面的字符
- 使用 I、i、a、A、: 或任何未映射的键(然后执行或插入自身)退出到 Cmdline 模式,或等待 60 秒。
- 使用 Esc 退出普通模式
(诚然,我不明白这个插件的意义,因为不是按 Ctrl + O进入它的 Cono 模式,你可以用Ctrl + F快速弹出命令行窗口。)
可能还有其他插件。 → https://www.google.com/webhp?q=command-line+editing+plugin+vim
您可以定义自己的映射,而不是使用成熟的插件或作为它的补充。 → 请参阅我的其他答案。
您可以在命令行模式下手动将特定的普通命令映射到击键。
例如,下面的一组映射将使命令行模式下的Alt + h向左移动一个字符, Alt + k调用之前的 Ex 命令等等,类似于普通模式下的h j k l 。
" provide hjkl movements in Command-line mode via the <Alt> modifier key
cnoremap <expr> <A-h> &cedit. 'h' .'<C-c>'
cnoremap <expr> <A-j> &cedit. 'j' .'<C-c>'
cnoremap <expr> <A-k> &cedit. 'k' .'<C-c>'
cnoremap <expr> <A-l> &cedit. 'l' .'<C-c>'
由于默认情况下 Alt 修饰键未映射(到重要的东西),您可以以相同的方式将其他(或所有)功能从正常模式拉到插入模式。 例如:使用Alt + b移动到当前单词的开头:
" Normal mode command(s) go… --v <-- here
cnoremap <expr> <A-b> &cedit. 'b' .'<C-c>'
cnoremap <expr> <A-w> &cedit. 'w' .'<C-c>'
" make <Alt>+<i> change the first word (typically
" the last run Ex :command or the last range, given the case)
cnoremap <expr> <A-i> &cedit. '^cw' .'<C-c>'
您必须将该代码复制到您的 vimrc 文件中,以便在每次启动 vim 时加载它(您可以通过键入:new $myvimrc
以正常模式启动来打开它)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.