如何使用vim和插件快速为所有行添加html属性和值?

时间:2017-03-26 02:37:53

标签: html awk sed sublimetext3 emmet

我的口碑:debian8。

uname -a
Linux debian 3.16.0-4-amd64 #1 SMP Debian 3.16.39-1+deb8u2 (2017-03-07) x86_64 GNU/Linux

这是我的基本文件。

home 
help 
variables 
compatibility 
modelines 
searching 
selection 
markers 
indenting 
reformatting 
folding 
tags 
makefiles 
mapping 
registers 
spelling 
plugins 
etc

我想创建一个html文件,如下所示。

<a href="home.html" id="home">home</a>
<a href="help.html" id="help">help</a>
<a href="variables.html" id="variables">variables</a>
<a href="compatibility.html" id="compatibility">compatibility</a>
<a href="modelines.html" id="modelines">modelines</a>
<a href="searching.html" id="searching">searching</a>
<a href="selection.html" id="selection">selection</a>
<a href="markers.html" id="markers">markers</a>
<a href="indenting.html" id="indenting">indenting</a>
<a href="reformatting.html" id="reformatting">reformatting</a>
<a href="folding.html" id="folding">folding</a>
<a href="tags.html" id="tags">tags</a>
<a href="makefiles.html" id="makefiles">makefiles</a>
<a href="mapping.html" id="mapping">mapping</a>
<a href="registers.html" id="registers">registers</a>
<a href="spelling.html" id="spelling">spelling</a>
<a href="plugins.html" id="plugins">plugins</a>
<a href="etc.html" id="etc">etc</a>

每一行都添加了href和id属性,其值是行内容粘贴.html和行内容本身相应的。

如何使用vim和插件快速为所有行添加html属性和值?
sed,awk,sublime text 3都欢迎解决这个问题。

10 个答案:

答案 0 :(得分:5)

$ sed 's:.*:<a href="&.html" id="&">&</a>:' file
<a href="home.html" id="home">home</a>
<a href="help.html" id="help">help</a>
<a href="variables.html" id="variables">variables</a>
<a href="compatibility.html" id="compatibility">compatibility</a>
<a href="modelines.html" id="modelines">modelines</a>
<a href="searching.html" id="searching">searching</a>
<a href="selection.html" id="selection">selection</a>
<a href="markers.html" id="markers">markers</a>
<a href="indenting.html" id="indenting">indenting</a>
<a href="reformatting.html" id="reformatting">reformatting</a>
<a href="folding.html" id="folding">folding</a>
<a href="tags.html" id="tags">tags</a>
<a href="makefiles.html" id="makefiles">makefiles</a>
<a href="mapping.html" id="mapping">mapping</a>
<a href="registers.html" id="registers">registers</a>
<a href="spelling.html" id="spelling">spelling</a>
<a href="plugins.html" id="plugins">plugins</a>
<a href="etc.html" id="etc">etc</a>

答案 1 :(得分:5)

如果您想在vi本身执行此操作,则无需插件

打开文件,键入:并将此行插入命令

%s:.*:<a href="&.html" id="&">&</a>

它将在文件中进行所有替换。

答案 2 :(得分:4)

如果你确定内容,那么sed是最好的解决方案(这里简单而且相当快),如果不是需要一些复杂性,awk可以更好地对待它:

awk '
   {
   # change special char for HTML constraint 
   Org = URL = HTML = $0
   # sample of modification
   gsub( / /, "%20", URL)
   gsub( /</, "%3C", HTML)

   printf( "<a href=\"%s\" id=\"%s\">%s</a>\n", URL, Org, HTML)
   }
   ' YourFile

答案 3 :(得分:3)

要在Sublime Text中轻松完成此操作,不添加任何插件:

  1. 在Sublime Text
  2. 中打开基本文件
  3. 键入Ctrl+Shift+P并在模糊搜索输入类型syn html中将文件语法设置为HTML。
  4. View菜单中,确保关闭Word Wrap
  5. Ctrl+A选择所有。
  6. Ctrl+Shift+L将选择分解为多行编辑。
  7. Ctrl+C将选择内容复制到剪贴板中。
  8. Alt+Shift+W用标记打包每一行 - 然后点按a将默认的<p>标记转换为<a>标记(点击esc至退出可能弹出的任何上下文菜单)
  9. 键入space,然后键入href=" - 您应该会看到它被添加到每一行,因为它们都有游标。另外你应该注意Sublime已经为你自动关闭了你的报价,所以你有href=""光标位于引号之间。
  10. ctrl+v - 这就是魔术发生的地方 - 你的剪贴板包含了每一行内容,所以它会将每个合适的值粘贴到光标所在的引号中。然后,您只需输入.html即可添加扩展程序。
  11. 使用向右箭头将光标移动到href属性的引号之外,并按照前面两个步骤同样添加id属性,其中粘贴了预期的id
  12. 瞧!你已经完成了。
  13. 当您学习如何将其与其他键盘快捷键结合使用时,多线编辑非常功能强大。这是我工作流程的巨大改进。如果您有任何疑问,请随时发表评论,我会根据需要进行调整。

答案 4 :(得分:2)

试试这个 -

awk '{print a$1b$1c$1d}' a='<a href="' b='.html" id="' c='">' d='</a>' file
<a href="home.html" id="home">home</a>
<a href="help.html" id="help">help</a>
<a href="variables.html" id="variables">variables</a>
<a href="compatibility.html" id="compatibility">compatibility</a>
<a href="modelines.html" id="modelines">modelines</a>
<a href="searching.html" id="searching">searching</a>
<a href="selection.html" id="selection">selection</a>
<a href="markers.html" id="markers">markers</a>
<a href="indenting.html" id="indenting">indenting</a>
<a href="reformatting.html" id="reformatting">reformatting</a>
<a href="folding.html" id="folding">folding</a>
<a href="tags.html" id="tags">tags</a>
<a href="makefiles.html" id="makefiles">makefiles</a>
<a href="mapping.html" id="mapping">mapping</a>
<a href="registers.html" id="registers">registers</a>
<a href="spelling.html" id="spelling">spelling</a>
<a href="plugins.html" id="plugins">plugins</a>
<a href="etc.html" id="etc">etc</a>

这里我创建了4个变量a,b,c&amp; d,您可以根据自己的选择进行编辑。

while read -r i;do echo  "<a href=\"$i.html\" id=\""$i"\">"$i</a>";done < f
<a href="home.html" id="home">home</a>
<a href="help.html" id="help">help</a>
<a href="variables.html" id="variables">variables</a>
<a href="compatibility.html" id="compatibility">compatibility</a>

答案 5 :(得分:2)

使用bash单行:

while read v; do printf '<a href="%s.html" id="%s">%s</a>\n' "$v" "$v" "$v"; done < file

(OR)

while read v; do echo "<a href=\"$v.html\" id=\"$v\">$v</a>"; done < file

答案 6 :(得分:2)

直接在vim中执行:

!sed 's:.*:<a href="&.html" id="&">&</a>:' %

答案 7 :(得分:1)

在awk中,没有正则表达式,没有任何内容,只有print个字符串$1 s,转义" s:

$ awk '{print "<a href=\"" $1 ".html\" id=\"" $1 "\">" $1 "</a>"}' file
<a href="home.html" id="home">home</a>
<a href="help.html" id="help">help</a>

如果你碰巧有空行,只需在/./之前添加{

/./{print ...

答案 8 :(得分:0)

list=$(cat basefile.txt)
for val in $list
do
   echo "<a href=\""$val".html\" id=\""$val"\">"$val"</a>" >> newfile.html
done

使用bash,您始终可以创建脚本或在命令行中输入该脚本。

答案 9 :(得分:0)

此vim替换模式处理您的基本文件:

s#^\s*\(.\{-}\)\s*$#<a href="\1.html" id="\1">\1</a>#
  • ^\s*匹配任何前导空格,然后
  • .\{-}在此之后捕获所有内容,非贪婪 - 允许
  • \s$以匹配任何尾随空格。
  • 这可以避免给你<a href="home .html" id="home ">home </a>
  • 这样的内容

您还可以同时使用vim处理多个基本文件:

vim -c 'bufdo %s#^\s*\(.\{-}\)\s*$#<a href="\1.html" id="\1">\1</a># | saveas! %:p:r.html' some.txt more.txt`
  • bufdo %s#^\s*\(.\{-}\)\s*$#<a href="\1.html" id="\1">\1</a>#在加载到vim中的每个缓冲区运行替换,
  • saveas! %:p:r.html使用html扩展名保存每个缓冲区,必要时覆盖,
  • vim将会打开并显示已保存的more.html,您可以根据需要进行更正,
  • 您可以使用:n:prev访问some.html

像sed这样的东西可能最适合大型工作,但是这可以让你在vim之后立即调整转换,使用:u撤消等等。享受!