在我用来初始化一些 TeX 相关设置的函数内部,我定义了以下映射:
vmap <buffer> ucm :s/^\% //<CR>:nohlsearch<CR>
Run Code Online (Sandbox Code Playgroud)
我希望它能让我轻松地取消注释视觉上选择的行。类似的:
vmap <buffer> cm :s/^/\% /<CR>:nohlsearch<CR>
Run Code Online (Sandbox Code Playgroud)
在评论方面做得非常好。其他语言的类似映射(使用 # 而不是 %)也可以正常工作。最后那些看起来像这样:
vmap <buffer> cm :s/^/# /<CR>:nohlsearch<CR>
vmap <buffer> ucm :s/^# //<CR>:nohlsearch<CR>
Run Code Online (Sandbox Code Playgroud)
一系列的V10jcmV10kucm应该使代码保持完整。
那么现在:我做错了什么?
所以我们知道
// This doesn't affect anything
/*
This doesn't affect anything either
*/
/*
/* /* /*
This doesn't affect anything
*/
This does because comments aren't recursive
/* /*
This doesn't affect anything
*/ */
This throws an error because the second * / is unmatched since comments aren't recursive
Run Code Online (Sandbox Code Playgroud)
我听说它们不递归的原因是因为它们会减慢编译器的速度,我想这是有道理的。然而现在,当我用更高级的语言(比如 Python)解析 C++ 代码时,我可以简单地使用正则表达式
"\/[\/]+((?![\n])[\s\S])*\r*\n"
Run Code Online (Sandbox Code Playgroud)
匹配// single line comments并使用
"\/\*((?!\*\/)[\s\S])*\*\/"
Run Code Online (Sandbox Code Playgroud)
匹配/* multiline comments */,然后循环遍历所有单行注释,将其删除,然后循环遍历所有多行注释并将其删除。或相反亦然。但这就是我被困住的地方。似乎只做其中之一还不够,因为:
// /*
An error is thrown because the /* …Run Code Online (Sandbox Code Playgroud) 我有一段时间第一次教授 C++ 编程课程,并且在某种程度上基于基础书籍示例,我发现学生希望他们的所有评论都像这样位于行尾:
for (int count = 1; count <= days; count++) { // Loop for each day
organisms += organisms * increase; // Compute organisms
cout << organisms << endl; // Print out organisms
}
Run Code Online (Sandbox Code Playgroud)
相反,我试图让他们使用专门的注释行,为此目的总结了几行代码:
// Update & display organisms for each day
for (int count = 1; count <= days; count++) {
organisms += organisms * increase;
cout << organisms << endl;
}
Run Code Online (Sandbox Code Playgroud)
后一种非行尾注释样式有合适的名称吗?
exec我想像这样定义一个Python函数:
exec """def my_func(alpha = 'a'):
return alpha"""
Run Code Online (Sandbox Code Playgroud)
有用。alpha = 'a'但是,出于特定原因,我想在单独的字符串中定义:
s = "alpha = 'a'"
exec """def my_func(s):
return alpha"""
Run Code Online (Sandbox Code Playgroud)
但这不起作用。有没有办法以这种方式将字符串变量内容插入到多行注释字符串中?
在 PHP 等语言中,我们可以执行以下操作:
>>> echo "cat is"." not"." dead"
cat is not dead
>>> echo "cat is"/*." not"*/." dead"
cat is dead
Run Code Online (Sandbox Code Playgroud)
我在第二行所做的是,使用 PHP 的多行注释功能注释掉其中的一部分。
请让我知道如何在 Python 中执行相同的操作,而不将代码行分成单独的行。
谢谢..!
这是一个测试文件
dog
dogcatmoose
case $- in
*i*);;
*) return;;
esac
catmoose
case
esac
dog cat
esac
Run Code Online (Sandbox Code Playgroud)
我需要注释掉以下内容:
dog
dogcatmoose
#case $- in
# *i*);;
# *) return;;
#esac
catmoose
case
esac
dog cat
esac
Run Code Online (Sandbox Code Playgroud)
请注意,仅注释掉了特定行。另请注意,我需要对多个文件执行此操作,并且注释掉的那些行可能位于文件的不同区域。然而,这些线将永远在一起。因此我无法根据行号使用 sed 进行注释。
我如何具体注释掉这些行,这将适用于多个文件,其中该部分可能位于文件中的任何位置。我假设我可以 grep on'case $- in'然后注释掉该行以及esac之后的第一个实例的所有行'case $- in'。
我怎样才能做到这一点?
我在任何地方都找不到有关 C# 文档注释的答案,所以请解释一下:
如果我在 [someFunc()] 中有一个单独的类和一个方法,那么使用 /// Visual Studio 将插入该方法的文档注释。
namespace someNs
{
internal class someClass
{
/// <summary>
///
/// </summary>
public void someFunc()
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我在“static void Main(string[] args)”中有一个方法,那么使用 /// 不起作用。
namespace someNs
{
internal class Program
{
static void Main(string[] args)
{
void someFunc()
{
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
请解释为什么会这样,是否可以通过某种方式添加文档注释?
谢谢。
我甚至不知道应该问什么问题.好吧,我想为我的评论竖起大拇指,但不确定如何或最好的方式.我只是为竖起大拇指创建一个新字段吗?
我想在application.html.erb中注释掉一些东西
<!--
<div id="user_nav">
<% if user_signed_in? %>
Signed in as <%= current_user.email %>. Not you?
<%= link_to "Sign out", destroy_user_session_path %>
<% else %>
<%= link_to "Sign up", new_user_registration_path %> or
<%= link_to "Sign in", new_user_session_path %>
<% end %>
</div>
//-->
Run Code Online (Sandbox Code Playgroud)
这不可能.怎么办?
我想出了一种快速方法,可以使用注释快速测试代码中的两个变体之间进行交换:
doSomeNormalCode();
findAnObject()
//*/
.doA()
/*/
.doB()
//*/
;
additionalNormalCode();
Run Code Online (Sandbox Code Playgroud)
这称为findAnObject().doA(); 简单地删除和/之间的第一次交换.这可以通过添加更多行来扩展:.doA().doB()/*/
doSomeNormalCode();
findAnObject()
//*/
.doA()
/*/
.doB()
/*/
.doC()
/*/
.doD()
/*/
.doE()
//*/
;
additionalNormalCode();
Run Code Online (Sandbox Code Playgroud)
执行此操作findAnObject().doA().doC().doE(); 您可以将任何/*/一个//*/转换为a 来切换它下面的所有行.因此,添加/之前.doB()会将其更改为findAnObject().doA().doB().doD().doF();
这当然非常复杂.我已经习惯了它,它对我来说非常快.我从来没有将它保存在已提交的代码中,只是为了快速交换测试选项.
有没有更简单的方法在各种选项之间快速切换,除了注释掉一个部分并取消注释另一个部分,如果在注释掉的代码中有/**/注释,则需要每行都有前缀,这可能很麻烦//.
我在这里明显提到C风格的评论,但我也对其他语言感兴趣.