我的口碑: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都欢迎解决这个问题。
答案 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)
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中轻松完成此操作,不添加任何插件:
Ctrl+Shift+P
并在模糊搜索输入类型syn html
中将文件语法设置为HTML。View
菜单中,确保关闭Word Wrap
。Ctrl+A
选择所有。Ctrl+Shift+L
将选择分解为多行编辑。Ctrl+C
将选择内容复制到剪贴板中。Alt+Shift+W
用标记打包每一行 - 然后点按a
将默认的<p>
标记转换为<a>
标记(点击esc
至退出可能弹出的任何上下文菜单)space
,然后键入href="
- 您应该会看到它被添加到每一行,因为它们都有游标。另外你应该注意Sublime已经为你自动关闭了你的报价,所以你有href=""
光标位于引号之间。ctrl+v
- 这就是魔术发生的地方 - 你的剪贴板包含了每一行内容,所以它会将每个合适的值粘贴到光标所在的引号中。然后,您只需输入.html
即可添加扩展程序。href
属性的引号之外,并按照前面两个步骤同样添加id
属性,其中粘贴了预期的id
当您学习如何将其与其他键盘快捷键结合使用时,多线编辑非常功能强大。这是我工作流程的巨大改进。如果您有任何疑问,请随时发表评论,我会根据需要进行调整。
答案 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扩展名保存每个缓冲区,必要时覆盖,more.html
,您可以根据需要进行更正,:n
和:prev
访问some.html
。像sed这样的东西可能最适合大型工作,但是这可以让你在vim之后立即调整转换,使用:u
撤消等等。享受!