如何使用 vim 和插件快速为所有行添加 html 属性和值?
How to add html attributes and values for all lines quickly with vim and plugins?
我的os: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解决问题
$ 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>
要在 Sublime Text 中轻松完成此操作,无需添加任何插件:
- 在 Sublime Text 中打开基础文件
- 键入
Ctrl+Shift+P
并在模糊搜索输入中键入 syn html
以将文件语法设置为 HTML.
- 在
View
菜单中,确保 Word Wrap
已关闭。
Ctrl+A
到 select 全部。
Ctrl+Shift+L
将 selection 分成多行编辑。
Ctrl+C
将 selection 作为多行复制到剪贴板。
Alt+Shift+W
用标签包裹每一行——然后点击 a
将默认的 <p>
标签转换为 <a>
标签(点击 esc
退出任何可能弹出的上下文菜单)
- 键入
space
然后 href="
-- 你应该看到它被添加到每一行,因为它们都有光标。另外你应该注意到 Sublime 已经自动为你关闭你的引号,所以你有 href=""
并且光标在引号之间。
ctrl+v
-- 这就是魔法发生的地方 -- 您的剪贴板包含每一行有价值的内容,因此它会将每个适当的值粘贴到光标所在的引号中。然后您只需键入 .html
即可添加扩展名。
- 使用向右箭头将光标移到
href
属性的引号外,然后按照前面两个步骤类似地添加具有预期 id
的 id
属性已粘贴。
- 瞧!大功告成。
多行编辑 非常 强大,因为您学习了如何将它与其他键盘快捷键结合使用。这对我的工作流程来说是一个巨大的改进。如果您有任何问题,请随时发表评论,我会根据需要进行调整。
试试这个 -
awk '{print abcd}' 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 和 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>
如果您对内容有把握,sed 是最好的解决方案(这里简单且非常快速),否则它需要一点复杂性,awk 可以更好地处理它:
awk '
{
# change special char for HTML constraint
Org = URL = HTML = [=10=]
# sample of modification
gsub( / /, "%20", URL)
gsub( /</, "%3C", HTML)
printf( "<a href=\"%s\" id=\"%s\">%s</a>\n", URL, Org, HTML)
}
' YourFile
使用 bash
一行:
while read v; do printf '<a href="%s.html" id="%s">%s</a>\n' "$v" "$v" "$v"; done < file
(或)
while read v; do echo "<a href=\"$v.html\" id=\"$v\">$v</a>"; done < file
在 awk 中,没有正则表达式,什么都没有,只有 print
字符串围绕 </code>s,转义 <code>"
s:
$ awk '{print "<a href=\"" ".html\" id=\"" "\">" "</a>"}' file
<a href="home.html" id="home">home</a>
<a href="help.html" id="help">help</a>
如果碰巧有空行,只需在 {
之前添加 /./
:
/./{print ...
直接在vim中执行:
!sed 's:.*:<a href="&.html" id="&">&</a>:' %
如果您想在 vi
本身执行此操作,则无需插件
打开文件,键入 :
并插入此行作为命令
%s:.*:<a href="&.html" id="&">&</a>
它将在文件中进行所有替换。
list=$(cat basefile.txt)
for val in $list
do
echo "<a href=\""$val".html\" id=\""$val"\">"$val"</a>" >> newfile.html
done
使用 bash,您可以随时制作脚本或将其输入命令行。
此 vim 替换模式处理您的基本文件:
s#^\s*\(.\{-}\)\s*$#<a href=".html" id=""></a>#
^\s*
匹配任何前导空格,然后
.\{-}
捕获之后的所有内容,非贪婪 — 允许
\s$
以匹配任何尾随空格。
- 这避免了给你
<a href="home .html" id="home ">home </a>
. 之类的东西
您还可以使用 vim 一次处理多个基本文件:
vim -c 'bufdo %s#^\s*\(.\{-}\)\s*$#<a href=".html" id=""></a># | saveas! %:p:r.html' some.txt more.txt`
bufdo %s#^\s*\(.\{-}\)\s*$#<a href=".html" id=""></a>#
对加载到 vim、 的每个缓冲区运行替换
saveas! %:p:r.html
使用 html 扩展名 保存每个缓冲区 ,必要时覆盖,
- vim 将打开并显示已保存的
more.html
,您可以根据需要进行更正,
- 您可以使用
:n
和:prev
访问some.html
。
sed 之类的东西可能最适合大型作业,但这让您可以在 vim 中立即调整转换,使用 :u
撤消等。享受吧!
我的os: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解决问题
$ 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>
要在 Sublime Text 中轻松完成此操作,无需添加任何插件:
- 在 Sublime Text 中打开基础文件
- 键入
Ctrl+Shift+P
并在模糊搜索输入中键入syn html
以将文件语法设置为 HTML. - 在
View
菜单中,确保Word Wrap
已关闭。 Ctrl+A
到 select 全部。Ctrl+Shift+L
将 selection 分成多行编辑。Ctrl+C
将 selection 作为多行复制到剪贴板。Alt+Shift+W
用标签包裹每一行——然后点击a
将默认的<p>
标签转换为<a>
标签(点击esc
退出任何可能弹出的上下文菜单)- 键入
space
然后href="
-- 你应该看到它被添加到每一行,因为它们都有光标。另外你应该注意到 Sublime 已经自动为你关闭你的引号,所以你有href=""
并且光标在引号之间。 ctrl+v
-- 这就是魔法发生的地方 -- 您的剪贴板包含每一行有价值的内容,因此它会将每个适当的值粘贴到光标所在的引号中。然后您只需键入.html
即可添加扩展名。- 使用向右箭头将光标移到
href
属性的引号外,然后按照前面两个步骤类似地添加具有预期id
的id
属性已粘贴。 - 瞧!大功告成。
多行编辑 非常 强大,因为您学习了如何将它与其他键盘快捷键结合使用。这对我的工作流程来说是一个巨大的改进。如果您有任何问题,请随时发表评论,我会根据需要进行调整。
试试这个 -
awk '{print abcd}' 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 和 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>
如果您对内容有把握,sed 是最好的解决方案(这里简单且非常快速),否则它需要一点复杂性,awk 可以更好地处理它:
awk '
{
# change special char for HTML constraint
Org = URL = HTML = [=10=]
# sample of modification
gsub( / /, "%20", URL)
gsub( /</, "%3C", HTML)
printf( "<a href=\"%s\" id=\"%s\">%s</a>\n", URL, Org, HTML)
}
' YourFile
使用 bash
一行:
while read v; do printf '<a href="%s.html" id="%s">%s</a>\n' "$v" "$v" "$v"; done < file
(或)
while read v; do echo "<a href=\"$v.html\" id=\"$v\">$v</a>"; done < file
在 awk 中,没有正则表达式,什么都没有,只有 print
字符串围绕 </code>s,转义 <code>"
s:
$ awk '{print "<a href=\"" ".html\" id=\"" "\">" "</a>"}' file
<a href="home.html" id="home">home</a>
<a href="help.html" id="help">help</a>
如果碰巧有空行,只需在 {
之前添加 /./
:
/./{print ...
直接在vim中执行:
!sed 's:.*:<a href="&.html" id="&">&</a>:' %
如果您想在 vi
本身执行此操作,则无需插件
打开文件,键入 :
并插入此行作为命令
%s:.*:<a href="&.html" id="&">&</a>
它将在文件中进行所有替换。
list=$(cat basefile.txt)
for val in $list
do
echo "<a href=\""$val".html\" id=\""$val"\">"$val"</a>" >> newfile.html
done
使用 bash,您可以随时制作脚本或将其输入命令行。
此 vim 替换模式处理您的基本文件:
s#^\s*\(.\{-}\)\s*$#<a href=".html" id=""></a>#
^\s*
匹配任何前导空格,然后.\{-}
捕获之后的所有内容,非贪婪 — 允许\s$
以匹配任何尾随空格。- 这避免了给你
<a href="home .html" id="home ">home </a>
. 之类的东西
您还可以使用 vim 一次处理多个基本文件:
vim -c 'bufdo %s#^\s*\(.\{-}\)\s*$#<a href=".html" id=""></a># | saveas! %:p:r.html' some.txt more.txt`
bufdo %s#^\s*\(.\{-}\)\s*$#<a href=".html" id=""></a>#
对加载到 vim、 的每个缓冲区运行替换
saveas! %:p:r.html
使用 html 扩展名 保存每个缓冲区 ,必要时覆盖,- vim 将打开并显示已保存的
more.html
,您可以根据需要进行更正, - 您可以使用
:n
和:prev
访问some.html
。
sed 之类的东西可能最适合大型作业,但这让您可以在 vim 中立即调整转换,使用 :u
撤消等。享受吧!