Vim 用#ifdef环绕多条选定线
我正在尝试编写一个宏,它允许我用一个#ifdef围绕当前高亮显示的文本行。理想情况下,将光标放在#ifdef之后,即可输入宏名称。我可以录制以创建宏,但我只能对一行代码进行录制 之前:Vim 用#ifdef环绕多条选定线,vim,Vim,我正在尝试编写一个宏,它允许我用一个#ifdef围绕当前高亮显示的文本行。理想情况下,将光标放在#ifdef之后,即可输入宏名称。我可以录制以创建宏,但我只能对一行代码进行录制 之前: bool first_selected_line = false; int second_selected_line = 0; 之后: #ifdef // if possible, cursor placed here in insert mode bool first_selected
bool first_selected_line = false;
int second_selected_line = 0;
之后:
#ifdef // if possible, cursor placed here in insert mode
bool first_selected_line = false;
int second_selected_line = 0;
#else
bool first_selected_line = false;
int second_selected_line = 0;
#endif
有什么想法吗?你可以按照以下思路做一些事情:
qjc#ifdef<esc>magpO#else<esc>gpO#endif<esc>`aq
qjc#ifdefmagpO#elsegpO#endif`aq
基本上:
- 开始录制
qj
- 删除所选内容并进入插入模式
c
- 键入构造,必要时将代码粘贴回原处
- 您在键入#ifdef后立即放置一个标记(
),并在末尾跳回该标记ma
- 用
@j
希望这个例子有帮助 我可能会使用snipmate或其他插件来完成这项任务。不过,有两种方法可以手动进行。以下是我的宏解决方案: 直观地选择文本,然后
qqc#ifdef
<C-r><C-o>"
#else
<C-r><C-o>"
#endif<esc>'[A<C-o>q
qqc#ifdef
"
#否则
"
#endif'[Aq
如果不想,您也不必直观地选择文本。请使用相同的宏,但从qqcj
开始