当我编辑 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 文件时会产生一些影响?
我找到了两种不同的方法;但作为代码阅读器,它们都没有清楚地描述我们想要做什么(简单地设置字符串内容);我本来期望的是这样的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)
有没有更易读的方法来做到这一点?这是一项如此简单的任务,令我惊讶的是没有捷径可走。
我的目标是尽可能保持效率。如果可能的话,我想保留实际容量,将新的字符串内容复制到现有的分配区域并更新字符串大小。
为了使<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有可能吗?
事实上,您可以使用以下语法显式访问成员变量(在成员函数内部,而不是特别是构造函数):(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) 我有一个名为test.txt的1.4 GB文本文件,我想在文件中搜索一个字符串.
我想知道为什么vim搜索(vim test.txt,然后键入/targetText搜索字符串)执行速度比cat test.txt | grep targetText?
在我的机器上,vim搜索大约需要几分钟才能完成搜索,同时cat test.txt | grep targetText需要几秒钟才能完成搜索.
我需要在脚本中添加一些东西来增加版本号:当我有 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是字符串而不是数字。
如何解决这个问题?
我使用 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)