vim - 基于下一行是否为空的不同命令

标签 vim viml

我正在尝试自动添加; ,或通过击键在表达式末尾需要的任何内容,然后转到另一行。

基本上会是这样的 inoremap <leader>; <C-o>A; ,但我想要一点改进。如果下一行为空(或不存在),我希望它执行 <C-o>A;<cr> ,如果它不为空,则 <C-o>A;<Down> 。换句话说,我需要一种惯用的方法来检查下一行是否存在以及是否为空。谢谢。

最佳答案

回答实际问题:

inoremap <expr> <leader>; getline(line(".")+1) =~ "^$" ? "\<C-o>A;\<CR>" : "\<C-o>A;\<Down>"

“表达式”映射允许您根据一个或多个表达式的结果执行不同的宏。在这里,我们检查下面的行在简单的三元运算符中是否为空。

引用:

:help <expr>
:help getline()
:help line()
:help =~

原始问题的原始答案:

inoremap <leader>; <C-o>A;^M

^M是一个字面量 <C-m> (<CR> 的同义词),您可以通过按 <C-v> 获得然后<CR> .

关于vim - 基于下一行是否为空的不同命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34370260/

相关文章:

vim - vim 分屏滚动速度非常慢

Vim:重新映射键以移至下一个非空白行(反之亦然)

function - Vimscript 打印功能?

vim - 在vim编辑器中将缓冲区列表作为quickfix窗口?

vim - 要在 Vim 中执行的条件行拆分的复杂案例

vim - 为什么在 vim 插入模式下输入大括号会使该行向左缩进?

vim - 如何使ctags在垂直拆分上显示标签定义而不打开新的拆分?

vim - 在 Vim 上的新选项卡上打开缓冲区

Vimscript : Number of listed buffers

vim - 奇怪的 vimscript 冒号语法