小编yol*_*yer的帖子

自动缩进:smartindent 和 indentexpr

当我编辑 Python 文件时,例如:

def my_func():
    print('Something')
    <-- CURSOR IS HERE
Run Code Online (Sandbox Code Playgroud)

我想通过输入 a 添加注释#,该行会自动重新缩进到该行的开头:

def my_func():
    print('Something')
#<-- CURSOR IS HERE
Run Code Online (Sandbox Code Playgroud)

我发现这是该smartindent选项的影响,因此要修复它,我只需运行:set nosi(或在我的 .vimrc 中禁用它)。

但在 Vim 的帮助中,:h 'smartindent'您可以阅读以下内容:

当 'cindent' 打开或设置 'indentexpr' 时,设置 'si' 无效。

但我的indentexpr选项设置如下:

:set indentexpr?
indentexpr=GetPythonIndent(v:lnum)
Run Code Online (Sandbox Code Playgroud)

我当然应该完全避免使用smartindent选项,因为它看起来是一个旧功能,并且仅设计用于 C 风格语言;

但我想知道,smartindent考虑到帮助中写的内容,为什么在编辑 python 文件时会产生一些影响?

vim auto-indent

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

创建字符串变量后如何替换它的内容?

我找到了两种不同的方法;但作为代码阅读器,它们都没有清楚地描述我们想要做什么(简单地设置字符串内容);我本来期望的是这样的s.set("hello")

fn main() {
    let mut s = String::from("hi");
    s.clear();
    s.push_str("hello");
    println!("{}", s);

    let mut s = String::from("hi");
    s.replace_range(.., "hello");
    println!("{}", s);
}
Run Code Online (Sandbox Code Playgroud)

有没有更易读的方法来做到这一点?这是一项如此简单的任务,令我惊讶的是没有捷径可走。

我的目标是尽可能保持效率。如果可能的话,我想保留实际容量,将新的字符串内容复制到现有的分配区域并更新字符串大小。

string rust

4
推荐指数
1
解决办法
2739
查看次数

获取函数调用的回溯

为了使<Fn>密钥更具可定制性,我使用了一个脚本(我称之为fkeys.vim),它创建了映射函数调用(让我们调用它Map()):对这个函数的调用取代了:map我在许多脚本中使用的命令.

它非常舒服,因为它让我可以轻松地在我的个人映射周围添加一些不错的功能,但它带来了一个新问题:当我想知道某个映射的定义位置时,如下所示:

:verbose map ...
Run Code Online (Sandbox Code Playgroud)

,然后vim总是说最后在fkeys.vim脚本中定义了映射,而不是在Map()调用的真实脚本中.这是合乎逻辑的,但非常令人沮丧,因为该:verbose map命令非常有用,并且是我知道快速查找映射定义的唯一方法.

一种解决方案是在我的Map()函数中添加一个参数,其中将传递实际脚本的文件名(为了存储此信息并在需要时将其恢复):

function! Map(lhs, rhs, [some other args...], caller)
Run Code Online (Sandbox Code Playgroud)

但它会污染我的脚本可读性,并且它看起来不太优雅.

更好的方法是能够获得函数调用的回溯,就像debug_backtrace()在php中一样.

Vim有可能吗?

vim

3
推荐指数
1
解决办法
592
查看次数

使用作用域运算符访问非静态成员变量

事实上,您可以使用以下语法显式访问成员变量(在成员函数内部,而不是特别是构造函数):(this->member_name即与同名的函数参数进行区分)。

除此之外,我认为ClassName::static_member保留该语法是为了访问类外部的静态成员。

然后,当我意识到以下set_2()方法正如人们所期望的那样工作时,我感到很惊讶:

#include <iostream>

struct A {
    int x;
    // The two following methods seem to act similarly:
    void set_1(int x) { this->x = x; }
    void set_2(int x) { A::x = x; }
};

int main ()
{
    A a;

    a.set_1(13);
    std::cout << a.x << std::endl;

    a.set_2(17);
    std::cout << a.x << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

#include <iostream>

struct A {
    int x;
    // The two following methods seem to act similarly: …
Run Code Online (Sandbox Code Playgroud)

c++ scope

3
推荐指数
1
解决办法
1984
查看次数

为什么vim搜索比"cat fileName | grep targetText"慢得多?

我有一个名为test.txt的1.4 GB文本文件,我想在文件中搜索一个字符串.

我想知道为什么vim搜索(vim test.txt,然后键入/targetText搜索字符串)执行速度比cat test.txt | grep targetText

在我的机器上,vim搜索大约需要几分钟才能完成搜索,同时cat test.txt | grep targetText需要几秒钟才能完成搜索.

vim search string-matching

2
推荐指数
1
解决办法
112
查看次数

Linux bash 或 sed 命令增加版本号

我需要在脚本中添加一些东西来增加版本号:当我有 string 时1.0.2,我想要一个 bash 命令来让它1.0.3.

像这样的东西,但这不起作用:

CI_COMMIT_TAG=1.0.2
patch=$((CI_COMMIT_TAG + 1)); echo new path=${CI_COMMIT_TAG}
Run Code Online (Sandbox Code Playgroud)

给出这个错误:

CI_COMMIT_TAG=1.0.2
patch=$((CI_COMMIT_TAG + 1)); echo new path=${CI_COMMIT_TAG}
Run Code Online (Sandbox Code Playgroud)

可能是因为1.0.2是字符串而不是数字。

如何解决这个问题?

bash sed

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

Docker,引用不同的容器。使用php命令调用mysqldump

我使用 Docker 在 Symfony3 项目上安装了一个数据库备份包 ( https://github.com/dizda/CloudBackupBundle ),但我无法让它工作,因为它找不到 PHP 或找不到 MySQL

当我php app/console --env=prod dizda:backup:start通过 exec、run 或通过 cron 运行时。我通过 PHP 映像收到 mysqldump 命令未找到错误,或从 Mysql/db 映像收到 PHP 未找到错误。

如何运行 php 命令,然后运行 ​​mysqldump 命令。

我的 docker-compose 文件如下:

version: '2'
services:
    web:
        # image: nginx:latest
        build: .
        restart: always
        ports:
            - "80:80"
        volumes:
            - .:/usr/share/nginx/html
        links:
            - php
            - db
            - node
        volumes_from:
            - php
        volumes:
            - ./logs/nginx/:/var/log/nginx
    php:
        # image: php:fpm
        restart: always
        build: ./docker_setup/php
        links:
            - redis
        expose:
            - …
Run Code Online (Sandbox Code Playgroud)

php mysql symfony docker docker-compose

0
推荐指数
1
解决办法
1327
查看次数

标签 统计

vim ×3

auto-indent ×1

bash ×1

c++ ×1

docker ×1

docker-compose ×1

mysql ×1

php ×1

rust ×1

scope ×1

search ×1

sed ×1

string ×1

string-matching ×1

symfony ×1