3

我想定期填充 html 属性之间的空间,以简化块模式下的编辑。

例子:

<p><input type="a" name="a" value="foo a"></p>
<p><input type="ab" name="ab" value="ab bar"></p>
<p><input type="abc" name="abc" value="baz abc"></p>

在可视块模式下选择三个输入并做一些魔术。

输出:

<p><input type="a"   name="a"   value="foo a"  ></p>
<p><input type="ab"  name="ab"  value="ab bar" ></p>
<p><input type="abc" name="abc" value="baz abc"></p>

(最好不要填写值之间的空格。)

我怎么做?

编辑:返回(编辑后)也很好。

4

4 回答 4

2

您可以使用Align 插件执行此操作:

:AlignCtrl mIp1P0=l
:Align \i\+=

或用它建立一个映射:

map <unique> <SID>WS    <Plug>AlignMapsWrapperStart
nmap <unique> <SID>WE   <Plug>AlignMapsWrapperEnd
map <silent> <script> <Leader>aa <SID>WS:AlignCtrl mIp1P0=l<CR><CR>:'a,'zAlign \i\+\s*=<CR><SID>WE

还有一个 Align 的替代方法,称为 Tabularize。

于 2012-07-26T07:30:56.960 回答
1

您可以为此使用外部工具,我使用 astyle 进行 C/C++ 编码,为了使其自动化,我在 ~/.vimrc 文件中插入了以下内容:

if filereadable("/usr/bin/astyle")
    silent! %!astyle
endif

如果符合您的需求,您可以搜索Tidy 。

观察者:使用 :%! 您将所有代码传递给外部工具“!,对于特定的选择'<,'>!应该使用。

现在您可以将快捷方式映射到此命令。

于 2012-07-25T17:33:43.207 回答
0

您在块模式下进行什么样的编辑?可能有一种更简单的编辑方法。

这是一个例子:

删除类型=“*”:

  • 逐行视觉选择块(即V})
  • 类型:规范 WdW

解释:

  • 当您通过可视选择键入 : 时,您应该会在命令行中看到 :'<,'>。这意味着仅对选择执行以下命令
  • :norm 表示以普通模式解释以下字符
  • W 跳转到下一个 Word 的开头
  • dW 删除直到下一个 Word 的开头

我确实必须按照您描述的方式对齐单词,以针对特定情况下优先考虑可读性(通常不赞成)。我最终做了一个快速破解来完成工作。在您的情况下,它看起来像:

  • (选择块)
  • :'<,'>s///g
  • (进入“输入”后的第一个空格)
  • (注意右下角的列号(10))
  • gv(重新选择块)
  • :norm 10ldw (删除
  • (转到“abc”之后的第一个空格(因为这是该列的最长值))
  • (注意列号(21))
  • : 标准 21ldw

... 等等

如果您只想删除一列,您可以将 1 个空格转换为多个,块选择包含每侧一些空格的列,删除并将多个空格转换回一个。

正如我之前所说,这种方法非常脆弱,只有在空格仅用于分隔列时才有可能。除了在块上使用 :norm 之外,您还可以考虑制作宏或尝试使用查找和替换来完成您的编辑任务

于 2012-07-25T17:46:33.063 回答
0

如果属性之间只有一个空格,您可以这样做:

 :s/"\s/"\t/g

你可以在这里看到更多。

于 2012-07-25T17:47:30.093 回答