VIM:映射一个键,以便在一行的开头插入x号的#

时间:2016-06-15 16:41:52

标签: vim

我想在行的开头跟一个空格插入x个字符#。我的目标是轻松地为标记放置标题:

在:
Title

输入5 + F5后 ##### Title

我刚设法插入带有F5键的#:nnoremap <F5> @='I#<C-V><Esc>'<CR>h

非常感谢!

1 个答案:

答案 0 :(得分:0)

在我看来,如果你使用vimscript而不是编辑命令,这个会更清楚一些。以下映射的工作方式如下:

  • 如果你没有计算,它会插入&#34;#&#34;在行的开头。
  • 如果您计算,则会插入计数*&#34;#&#34;其次是&#34; &#34;在行的开头。

映射:

nmap <F5> :<C-u>call setline('.', substitute(getline('.'), '^', repeat('#', v:count1) . ' ', ''))<Enter>

在回复下面的评论时,这里有一个版本,它会修改当前行,使其具有正好<count>个哈希后跟一个空格 - 即使它已经有哈希值和空格。如果<count>为零,则会删除哈希值和空格。

nmap <F5> :<C-u>call setline('.', substitute(getline('.'), '\v^(#+ )?', repeat('#', v:count) . repeat(' ', min([1, v:count])), ''))<Enter>

因为这对于单行地图来说真的很忙,所以这里改为使用函数:

function SetMarkdownHeader()
  let current_line = getline('.')
  let hashes = repeat('#', v:count)
  let maybe_space = repeat(' ', min([v:count, 1]))
  let new_line = substitute(current_line, '\v^(#+ )?', hashes . maybe_space, '')

  call setline('.', new_line)
endfunction

nmap <f5> :<C-u>call SetMarkdownHeader()<Enter>