如何将文本块转换为VIM中的项目符号?

时间:2018-05-11 19:04:22

标签: vim

在VIM中,有没有办法选择一个文本块并将其转换为项目符号或列表?

鉴于此文:

abc
def
ghi

我希望能够直观地选择它们并将它们转换为列表:

* abc
* def
* ghi

我一直在手动执行此操作,在整个文本的第一列使用可视块模式<C-v>,然后执行插入(即<C-v>jjjI* <esc>)。但是,它非常麻烦,我喜欢让这个操作更容易执行。

奖励:在项目符号和普通文本之间切换会很棒。能够创建编号列表而不是子弹列表也很棒(但这可能是另一个SO问题)。

2 个答案:

答案 0 :(得分:3)

这里的限制确实知道列表内容的开始和结束位置。一旦你突出显示它我不确定你能比I* <esc>快得多。

如果你有一个很长的列表,并且你知道列表后面有一个空行,每个元素都在它自己的行上,你可以移动到列表的开头,然后<C-V>)bI* <esc>这将更快如果你的名单特别长。 )会将您移至当前段落的末尾。

如果您的列表在文件末尾结束,则<C-v>GI* <esc>将起作用。

您可以使用.重做上一组命令,因此移至列表的开头并运行I* <esc>,然后j.j.j.j.将有效,但我不会认为这比你已经做的要好得多。

一般情况下,如果您能找到更快捷的方式移动到列表末尾,I* <esc>可能足够快。如果您愿意,可以在.vimrc中创建一个键映射,以便在您需要做很多事情的情况下更快地完成此操作。

答案 1 :(得分:1)

您可以定义以下地图:

nnoremap <m-n> vip:s/^/* /<cr>
nnoremap <m-u> vip:s/^/\=(line('.')-line("'<")+1).' '/<cr>                                                             

第一张地图(肯特先前的答案中提供)会将*放在当前段落的每一行之前。第二张地图将编制一个编号列表。