在 Vim 中,我可以提供格式字符串,将其提取出来,然后将其与范围内的格式化值一起粘贴吗?Python 2 中的一个示例是:
对于范围(1,3)内的 i:打印“这是第 %d 行”%i
如果在 Vim 中无法实现这一点,那么在 Emacs 或其他编辑器中可以实现吗?
答案1
我不完全清楚你想要什么,但是在 Vim 中你可以做这样的事情:
:for i in range(line('$')) | call append(i+i, printf("this is line %d:", i+1)) | endfor
我使用“ ”的原因i+i
是,当行插入缓冲区时,行号会发生变化,而这会对此进行纠正。(如果您的范围中有不同的“起点”,则您的校正算法将不得不更加复杂。)
或者,如果您想修改缓冲区中现有的行:
:for i in range(1, line('$')) | call setline(i, printf("this is line %2d: %s", i, getline(i))) | endfor
当然,如果您不想更改缓冲区,而只是想打印到屏幕,请使用“echo”而不是“call”,并从 printf() 周围删除 append() / setline() 块。
看:
:help :for
:help :call
:help :echo
:help range()
:help line()
:help append()
:help setline()
:help getline()
:help printf()
答案2
在 Emacs 中尝试:
M: (dotimes (i 3) (insert (format "This is line %2d.\n" (1+ i))))
这里M:
代表eval-expression