如何在VIM中将文本块转为项目符号/编号列表并简化操作?
在Vim中高效转换文本为列表(含切换与编号功能)
当然可以!Vim 里完全能轻松实现你要的这些功能,甚至比你现在的手动块插入操作高效得多。我来一步步给你拆解实用方案:
快速将选中文本转为无序列表(项目符号)
你不需要再用可视块模式手动插入,直接可视化选中目标文本后,执行以下命令:
:'<,'>s/^/* /
<,'>是Vim自动识别的选中范围,不用手动输入;s/^/* /表示把每一行的行首替换成*(星号加空格),一键完成所有行的项目符号添加。
如果觉得输入命令麻烦,还可以给这个操作绑定快捷键。在你的~/.vimrc(Neovim用户是init.vim)里添加:
vnoremap <leader>ul :s/^/* /<CR>
以后只要选中文本,按<leader>ul(默认leader是反斜杠\,你也可以自定义)就能直接转成无序列表。
实现项目符号与普通文本的切换
要一键切换“带项目符号/普通文本”,可以写个简单的Vim函数并绑定快捷键。同样在配置文件里加:
vnoremap <leader>tl :call ToggleListItem()<CR> function! ToggleListItem() " 匹配行首的* ,有则移除,无则添加 execute ":'<,'>s/^\(\* \)\?\(.*\)/\=submatch(1) == '' ? '* '.submatch(2) : submatch(2)/" endfunction
选中文本后按<leader>tl,就能自动判断每行是否有项目符号:有就去掉,没有就加上,完美实现切换需求。
生成编号列表
要把选中文本转为编号列表,可视化选中后执行:
:'<,'>s/^/\=line('.') - line("'<") + 1 . '. '/
这个命令会计算每行在选中区域里的相对位置,自动生成从1开始的编号(比如1. xxx、2. xxx...)。
同样可以绑定快捷键简化操作:
vnoremap <leader>ol :s/^/\=line('.') - line("'<") + 1 . '. '/<CR>
选中后按<leader>ol就能快速生成编号列表。
这些配置都可以永久保存在你的Vim配置文件里,以后用起来就顺手多了~
内容的提问来源于stack exchange,提问作者Daniel Kim
相关产品推荐
相关产品推荐

