小编Lon*_*ner的帖子

如何使gx命令适用于XFCE4桌面上的Vim中的URL?

在我的Windows 7系统上使用GVim,如果我在光标位于URL上时按gx,它会在Firefox中启动URL(我在Windows上的默认浏览器).

但是,当我在Debian 8.3 Linux系统上的XFCE4桌面上执行相同操作时,按gx什么都不做.

我在两个系统上都使用GVim(Vim 7.4).

:let g:netrw_browsex_viewer命令E121: Undefined variable: g:netrw_browsex_viewer在两个系统上都返回.

我尝试:let g:netrw_browsex_viewer= "xdg-open"在Linux系统上输入命令,但它根本没用.

我有两个问题:

  1. 为什么该gx命令适用于Windows系统上的URL,而不适用于Debian Linux系统上的XFCE4桌面,尽管g:netrw_browsex_viewer两者都未定义?
  2. 如何gx在Debian Linux系统上使命令适用于XFCE4桌面上的URL?

vim

5
推荐指数
1
解决办法
415
查看次数

当stdout被重定向到文件时,为什么C程序的输出顺序不同?

这是我的计划.

#include <stdio.h>
#include <stdlib.h>

int main()
{
    printf("Hello\n");
    system("uname");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是输出.

$ gcc foo.c
$ ./a.out 
Hello
Linux
Run Code Online (Sandbox Code Playgroud)

但是,如果我将程序的输出重定向到文件,我会看到输出的顺序是相反的,即Linux之前打印的顺序Hello.

$ ./a.out > out.txt
$ cat out.txt
Linux
Hello
Run Code Online (Sandbox Code Playgroud)

为什么涉及重定向时输出的顺序不同?

c linux io-redirection output

5
推荐指数
1
解决办法
92
查看次数

如何在 Go 中为循环变量声明变量类型?

请参阅此代码。

package main

import (
    "fmt"
)

func main() {
    var arr [4]string = [4]string{"foo", "bar", "baz", "qux"}

    for a, b := range arr {
        fmt.Println(a, b)
    }

    // How can I fix this code?
    /*
    for x int, y string = range arr {
        fmt.Println(a, b)
    }
    */
}
Run Code Online (Sandbox Code Playgroud)

第一个 for 循环使用:=运算符自动推导出aand的类型b。但是如果我想明确指定循环变量的类型呢?我尝试这样做是在注释代码的第二个块中,这当然因以下错误而失败。

# command-line-arguments
./foo.go:15: syntax error: unexpected name, expecting {
./foo.go:18: syntax error: unexpected }
Run Code Online (Sandbox Code Playgroud)

你能不能帮我解决的第二个代码块,这样我可以指定类型的xy明确?

for-loop go variable-declaration

5
推荐指数
1
解决办法
2259
查看次数

如何处理Go接口中的重复方法?

如何处理Go接口中的重复方法?

package main

import (
    "fmt"
)

type Person interface {
    Hello()
}

type Joker interface {
    Person
    Joke()
}

type Jumper interface {
    Person
    Jump()
}

type Entertainer interface {
    Joker
    Jumper
}

func main() {
    fmt.Println("hello, world")
}
Run Code Online (Sandbox Code Playgroud)

如果我运行此代码,则会出现以下错误.

$ go run foo.go
# command-line-arguments
./foo.go:24: duplicate method Hello
Run Code Online (Sandbox Code Playgroud)

如何处理这样的情况,我们如何在这种情况下避免重复的方法?

interface go

5
推荐指数
1
解决办法
1142
查看次数

如何将值中带有空格的变量作为单个参数传递给 GNU make 函数?

这是我的 Makefile。

MYPATH = /dir 1/file 1.txt

test1:
    echo $(notdir $(MYPATH))

test2:
    echo $(notdir "$(MYPATH)")

test3:
    echo TODO
Run Code Online (Sandbox Code Playgroud)

我的目的是仅获取file 1.txt来自 的路径的一部分 /dir 1/file 1.txt。是的,这是一条有空格的路径。

我无法得到想要的结果。

$ make test1
echo dir file 1.txt
dir file 1.txt
Run Code Online (Sandbox Code Playgroud)

在上面的输出中,似乎notdir提供了三个单独的参数:/dir1/file1.txt,因此notdir 返回了它们的部分:dirfile1.txt

以下根本不起作用。

$ make test2
echo dir file 1.txt"
/bin/sh: 1: Syntax error: Unterminated quoted string
Makefile:7: recipe for target 'test2' failed
make: *** [test2] Error …
Run Code Online (Sandbox Code Playgroud)

makefile gnu-make

5
推荐指数
0
解决办法
3333
查看次数

zsh 在参数扩展后没有被 IFS 拆分

这是我的代码,用于遍历冒号分隔的值并对每个值执行某些操作。

f()
{
    IFS=:
    for arg in $1
    do
        echo arg: $arg
    done
}

f foo:bar:baz
Run Code Online (Sandbox Code Playgroud)

这在大多数符合 POSIX 的 shell 中都可以正常工作。

$ dash foo.sh
arg: foo
arg: bar
arg: baz
$ bash foo.sh
arg: foo
arg: bar
arg: baz
$ ksh foo.sh
arg: foo
arg: bar
arg: baz
$ posh foo.sh
arg: foo
arg: bar
arg: baz
$ yash foo.sh
arg: foo
arg: bar
arg: baz
Run Code Online (Sandbox Code Playgroud)

但它在 zsh 中没有按预期工作。

$ zsh foo.sh
arg: foo:bar:baz
Run Code Online (Sandbox Code Playgroud)

zsh这里是否违反了POSIX

bash shell posix zsh ifs

5
推荐指数
1
解决办法
692
查看次数

动态创建 std::vector 并将其传递给另一个函数的各种方法

我正在尝试各种std::vector即时创建并将其传递给另一个函数的方法:

#include <iostream>
#include <vector>

void print(std::vector<int> a)
{
    std::cout << a.size() << '\n';
}

int main()
{
    print({1, 2, 3, 4, 5});
    print(std::vector<int>{1, 2, 3, 4, 5});
    print(std::vector<int>({1, 2, 3, 4, 5}));
}
Run Code Online (Sandbox Code Playgroud)

这会产生所需的输出:

$ clang++ -std=c++11 foo.cpp && ./a.out
5
5
5
Run Code Online (Sandbox Code Playgroud)

我想知道这三个调用之间有什么区别:

print({1, 2, 3, 4, 5});
print(std::vector<int>{1, 2, 3, 4, 5});
print(std::vector<int>({1, 2, 3, 4, 5}));
Run Code Online (Sandbox Code Playgroud)

这是另一个例子:

#include <iostream>
#include <vector>

int main()
{
    std::vector<int> a = {1, 2, 3, 4, 5};
    // std::cout …
Run Code Online (Sandbox Code Playgroud)

c++ vector parameter-passing literals semantics

5
推荐指数
1
解决办法
2127
查看次数

为什么带有换行符的 PRE 元素不会在输出中产生空行?

实施例1

pre {
  background: lightblue;
}
Run Code Online (Sandbox Code Playgroud)
<pre>
<code>
foo
</code>
</pre>
Run Code Online (Sandbox Code Playgroud)

上方和下方出现空白行foo。这是预期的,因为 PRE 元素中有换行符。

实施例2

pre {
  background: lightblue;
}
Run Code Online (Sandbox Code Playgroud)
<pre><code>
foo
</code></pre>
Run Code Online (Sandbox Code Playgroud)

上方出现空白行foo,但下方不出现。为什么?

实施例3

pre {
  background: lightblue;
}
Run Code Online (Sandbox Code Playgroud)
<pre><code>foo</code></pre>
Run Code Online (Sandbox Code Playgroud)

前后不再有空行,foo因为 HTML 代码中没有换行符。

实施例4

pre {
  background: lightblue;
}
Run Code Online (Sandbox Code Playgroud)
<pre>
<code>foo</code>
</pre>
Run Code Online (Sandbox Code Playgroud)

<pre>之后和之前都有换行符</pre>foo所以我期待输出中前后有空行。为什么这个例子中没有空行?

问题

  1. 为什么示例2中只出现一个空行?
  2. 为什么示例 4 的输出中没有空行?

html whitespace w3c newline

5
推荐指数
1
解决办法
1174
查看次数

如何使用 JSDOM 加载本地 JavaScript 文件?

我无法使用 JSDOM(版本 13.0.0)从具有相对路径的本地文件系统加载脚本。

我查看了以下问题,但它们没有回答我的问题:

文件foo.js

var jsdom = require('jsdom')

var html = `<!DOCTYPE html>
<html>
  <head>
    <title>Test</title>
    <script src="bar.js"></script>
  </head>
  <body>
    <div>Test</div>
  </body>
</html>`

global.window = new jsdom.JSDOM(html, { runScripts: "dangerously", resources: "usable" }).window
console.log('foo')
Run Code Online (Sandbox Code Playgroud)

文件bar.js

console.log('bar')
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

$ node foo.js
foo
Error: Could not load script: "bar.js"
    at onErrorWrapped (/Users/lone/so/node_modules/jsdom/lib/jsdom/browser/resources/per-document-resource-loader.js:41:19)
    at Object.check (/Users/lone/so/node_modules/jsdom/lib/jsdom/browser/resources/resource-queue.js:72:23)
    at request.then.catch.err (/Users/lone/so/node_modules/jsdom/lib/jsdom/browser/resources/resource-queue.js:124:14)
    at process._tickCallback (internal/process/next_tick.js:68:7)
    at Function.Module.runMain (internal/modules/cjs/loader.js:746:11)
    at startup (internal/bootstrap/node.js:240:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:564:3) Error: …
Run Code Online (Sandbox Code Playgroud)

javascript node.js jsdom

5
推荐指数
1
解决办法
6345
查看次数

为什么在某些情况下 console.log 会记录带引号的字符串?

我正在运行 Node.js v10.5.0 的这些示例。当我只用它打印字符串时,它打印的字符串不带引号。

> console.log('foo', 'bar')
foo bar
undefined
Run Code Online (Sandbox Code Playgroud)

但是当我一起打印字符串和数字时,它会打印带有引号的字符串。

> console.log(1, 'foo', 'bar')
1 'foo' 'bar'
undefined
Run Code Online (Sandbox Code Playgroud)

为什么会出现这种差异呢?我期望它在第二个示例中打印以下内容:

1 foo bar
Run Code Online (Sandbox Code Playgroud)

在 Chrome 70 中也可以观察到类似的行为。

当存在数字类型的参数时,看起来像是console.log()选择在引号中显示字符串,但是即使涉及数字,这些示例也会打印不带引号的所有字符串:

> console.log('foo', 'bar', 1)
foo bar 1
undefined
> console.log('foo', 1, 'bar')
foo 1 bar
undefined
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?为什么console.log()在某些情况下打印带引号的字符串,而在其他情况下则不打印?

javascript types google-chrome node.js

5
推荐指数
1
解决办法
3660
查看次数