我从中学到了这个堆栈溢出问题可以使用vi
/vim
注释掉指定范围的行号。例如,假设我有以下 bash 脚本:
#!/bin/bash
This
is
my
very
very
great
script
现在假设我想使用注释字符注释掉第 6 行到第 8 行(其中包含单词very
、very
和great
)#
。在vi
/中vim
,我只需键入:6,8s/^/#
即可获取以下内容:
#!/bin/bash
This
is
my
#very
#very
#great
script
其中注释掉了第 6 行到第 8 行。
我的问题是,是否有可能键入一个类似的衬里消除第 6 行到第 8 行的注释字符#
(但不是文件中的任何其他注释行)?
vi
话虽如此,我意识到关于我是否实际上使用或存在一些争论vim
。在实践中,我script.sh
使用命令打开一个文件vi script.sh
。另外,当我输入命令时which vi
,我得到了/usr/bin/vi
.然而,当我简单地输入vi
并按下时Enter,我得到了这个:
~ VIM - Vi IMproved
~
~ version 7.2.330
~ by Bram Moolenaar et al.
~ Vim is open source and freely distributable
~
~ Sponsor Vim development!
~ type :help sponsor<Enter> for information
~
~ type :q<Enter> to exit
~ type :help<Enter> or <F1> for on-line help
~ type :help version7<Enter> for version info
这似乎表明我实际上正在使用vim
.我正在使用 SSH 从我的 PC 访问远程 Ubuntu Linux 集群。我没有使用 Ubuntu Linux GUI。
答案1
答案2
我知道您的问题指定使用vi
或,vim
但这里有一些其他选项可以执行此操作,而无需手动打开文件:
珀尔
perl -ne 'if($. <=8 && $. >= 6){s/^\s*#//;}print' foo.sh
Perl 版本 >=5.10
perl -ne '$. ~~ [6..8] && s/^\s*#//;print' foo.sh
这将打印出文件的内容,您可以重定向到另一个 (
> new_file.sh
) 或使用i
就地编辑文件:perl -i -ne '$. ~~ [6..8] && s/^\s*#//;print' foo.sh
sed
sed '6,8 s/^ *#//' foo.sh
同样,要就地编辑原始文件,请使用
i
:sed -i '6,8 s/^ *#//' foo.sh
awk
/gawk
ETC:gawk '(NR<=8 && NR>= 6){sub("^ *#","")}{print}' foo.sh
纯的
bash
:c=1; while read line; do if [ $c -ge 6 ] && [ $c -le 8 ]; then echo "${line/\#/}" else echo $line fi let c++; done < foo.sh
答案3
vi
是大多数 GNU/Linux 发行版中的符号链接,因此当您键入 时,vim
您确实正在使用.vim
vi
要删除注释,您可以键入::6,8s/^#//
或:6,8s/^\s*#//
删除#
符号前的一些前导空格。
答案4
您可能正在使用vim.tiny
.无论如何,您可以通过以下方式删除最初的评论:
:6,8s/^#//
当然,如果您以不同的方式插入它们(例如,使用额外的空格),您可能需要删除其中的其他内容。使用完整的 vim,直观地选择列和插入/删除字符是完成相同操作的更简单的方法。