在VIM中,有没有办法选择一个文本块并将其转换为项目符号或列表?
鉴于此文:
abc
def
ghi
我希望能够直观地选择它们并将它们转换为列表:
* abc
* def
* ghi
我一直在手动执行此操作,在整个文本的第一列使用可视块模式<C-v>
,然后执行插入(即<C-v>jjjI* <esc>
)。但是,它非常麻烦,我喜欢让这个操作更容易执行。
奖励:在项目符号和普通文本之间切换会很棒。能够创建编号列表而不是子弹列表也很棒(但这可能是另一个SO问题)。
答案 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>
第一张地图(肯特先前的答案中提供)会将*
放在当前段落的每一行之前。第二张地图将编制一个编号列表。