如果您正在VIM中编辑文件,然后需要打开现有缓冲区(例如,从缓冲区列表中)::buffers如何在垂直拆分中打开它?
我知道你已经可以通过正常分割打开它,如:
:sbuffer N
Run Code Online (Sandbox Code Playgroud)
Wehere N是您想要的缓冲区编号,但是,上面打开N缓冲区水平而不是垂直.
我也知道你可以在打开后更改窗口位置,并像这样进行垂直分割:
Ctrl-W H
Ctrl-W L
Run Code Online (Sandbox Code Playgroud)
这会将窗口垂直分割为右侧或左侧.
在我看来,如果有一个sbuffer应该有一个,vsbuffer但不存在(不是我知道)
此外,请注意我不是在寻找一个插件来解决这个问题.我知道有很多插件可以让你这样做.
我相信我可能会遗漏已经存在的东西.
编辑:在最好的合作精神,我已经创建了一个简单的功能与映射如果其他人偶然发现这个问题,并且不想安装插件:
功能:
" Vertical Split Buffer Function
function VerticalSplitBuffer(buffer)
execute "vert belowright sb" a:buffer
endfunction
Run Code Online (Sandbox Code Playgroud)
制图:
" Vertical Split Buffer Mapping
command -nargs=1 Vbuffer call VerticalSplitBuffer(<f-args>)
Run Code Online (Sandbox Code Playgroud)
这完成了在右侧拆分中打开缓冲区的任务,因此对于缓冲区1,您可以将其称为:
:Vbuffer 1
Run Code Online (Sandbox Code Playgroud) 我一直在寻找在Vim中映射一个带有额外参数的新运算符.
例如,我们知道ciw将"切入内部单词"并将使您进入插入模式,我正在寻找的是一个自定义动作来替换c(例如s)iw需要额外参数的动作.
一个简单的例子是:
Given a line in a text file
Run Code Online (Sandbox Code Playgroud)
并执行正常模式(给定光标在第一列)siw*,这将围绕第一个单词,*如下所示:
*Given* a line in a text file
Run Code Online (Sandbox Code Playgroud)
我知道,这是最优秀的surround.vim插件.但我只是在这里给出一个例子,并寻找一个关于如何获得映射以便上述工作的答案.
我试着用打onoremap和opfunc,但似乎无法让他们打我想要的方式.
所以这是运动和运算符挂起映射的组合.
我是一个快乐的BASH用户.我不想切换到另一个shell(在这种情况下是ZSH).
ZSH具有更改目录的能力,无需键入:
cd /to/a/directory
Run Code Online (Sandbox Code Playgroud)
在不必键入的情况下更改目录的正确别名(或BASH函数)是cd什么?
在上面的例子中,移动到/ to/a /目录将完成如下:
/to/a/directory
Run Code Online (Sandbox Code Playgroud)
我试过了:
alias ''='cd '
alias ""='cd '
alias " "='cd '
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我试图stdout通过subprocess.Popen电话抓住,虽然我通过这样做很容易实现:
cmd = subprocess.Popen('ls -l', shell=True, stdout=PIPE)
for line in cmd.stdout.readlines():
print line
Run Code Online (Sandbox Code Playgroud)
我想stdout"实时" 抓住.使用上面的方法,PIPE正在等待抓取所有stdout,然后它返回.
因此,对于记录目的,这不符合我的要求(例如,"看到"发生时发生的事情).
有没有办法一行一行地stdout运行?或者这是一个限制subprocess(必须等到PIPE关闭).
编辑
如果我转readlines()了readline(),我只得到了最后一行stdout(不理想):
In [75]: cmd = Popen('ls -l', shell=True, stdout=PIPE)
In [76]: for i in cmd.stdout.readline(): print i
....:
t
o
t
a
l
1
0
4
Run Code Online (Sandbox Code Playgroud) 我有一个包含多个组件的包,这些组件将从使用日志记录和输出有用信息中受益匪浅.
我不想做的是为这些行中的某个地方的每个文件"设置"正确的日志记录:
import logging
logging.basicConfig(level=DEBUG)
my_function = logging.getLogger("my_function")
my_class = logging.getLogger("my_class")
Run Code Online (Sandbox Code Playgroud)
我尝试了几种方法,其中一种方法是将样板代码添加到实用程序模块中的类中,并尝试执行以下操作:
from util import setlogging
set_logging()
Run Code Online (Sandbox Code Playgroud)
但即使上面的解决方案看起来并不干净,也会导致问题,因为setLogger没有__call__方法.我所喜欢的是我的"set_logging"类将从一个配置文件中读取并具有一些默认值,因此无论我想要什么级别或哪种类型的日志记录格式都可以正确设置它.
有没有办法在我的包中初始化正确的日志记录?也许在__init__.py文件中?
只是为了尽可能冗长,这就是setlogging(现在是一个函数,而不是一个类)的样子:
def setlogging(config=None):
if config == None:
config = config_options() # sets default values
levels = {
'debug': DEBUG,
'info': INFO
}
level = levels.get(config['log_level'])
log_format = config['log_format']
datefmt = config['log_datefmt']
basicConfig(
level = level,
format = log_format,
datefmt = datefmt)
Run Code Online (Sandbox Code Playgroud) 我已经搜索了不同类型的变通方法来处理在Omnicompletion中进行选择时将当前窗口拆分为显示文档的预览窗口,如关闭预览窗口(如果它在退出插入模式时存在).
但是,这些解决方案是不切实际的.有时您可能希望进入预览窗口以阅读有关当前完成模块的一些文档,但是如果使用自动命令,则无法进行此操作.
即使它会,我希望文档永远不会出现,因为我真的不想要它.
阅读源代码,pythoncomplete.vim我看到文档的值是硬编码的,如果有任何内容,它将强制显示预览窗口(如果它不能提供模块的文档,它会跳过它).
是否有一个全局选项,我不知道告诉Vim永远不会显示文档?或者能够切换它?
如果我也想读在拆分窗口中的文档让我(也许一些快捷键),这样做,否则不显示我什么.
我真的想避免复制/粘贴pythoncomplete.vim以根据自己的喜好调整这个特定的设置.
我正在编写一些折叠函数,我需要检查当前行是否实际上是折叠.
这是因为它是一种自定义折叠方法,取决于搜索/匹配某些行.
例如,如果当前行折叠并且看起来像:
-FOO------------------------
Run Code Online (Sandbox Code Playgroud)
如果您执行以下操作:
getline('.')
Run Code Online (Sandbox Code Playgroud)
你基本上会FOO这样得到(我知道)没有办法知道我是否处于弃牌状态.
这有辅助功能吗?
我认为它必须是这样的:
is_folded('.')
Run Code Online (Sandbox Code Playgroud)
我可能会搞砸foldtext为折叠指定一个特殊的标题,但我想避免这种情况.
我试图使用外部命令来处理Vim中一系列行的某些格式,但似乎无法找到处理外部命令错误的方法.
这些错误通常是在shell返回0以外的内容时,它会提示Vim显示以下内容:
shell returned 1
Run Code Online (Sandbox Code Playgroud)
除此之外,它还将我想要格式化的行替换为错误的实际消息.如果我这样做,也会发生这种情况:
:set equalprg=myformatter\ --format-flag\
Run Code Online (Sandbox Code Playgroud)
如何安全地捕获外部命令的错误并显示错误消息是什么?
注意:这不是关于如何使用外部命令格式化Vim中的某些文本的问题,而是如何捕获错误并显示消息.
我试图用gunicorn + supervisor运行一个小的WSGI应用程序,虽然一切正常,但我无法登录到文件.
如果我直接运行gunicorn命令,它确实可以工作,将所有输出发送到我指定的文件,但是一旦我尝试与主管相同的事情,它就不会.
我最近把这个小的WSGI应用程序从uwsgi移到了gunicorn,我没有uwsgi登录到文件的问题,所以我怀疑我要么在与主管合作时丢失了gunicorn所需要的东西,要么存在一个不明显的问题.我.
该应用程序被调用upload,这是该应用程序的主管配置如下所示:
[program:upload]
command=/vagrant/venv/bin/gunicorn -w 4 upload.wsgi:application --log-file /vagrant/log/application.log --log-level debug
directory=/vagrant
autostart=true
autorestart=true
Run Code Online (Sandbox Code Playgroud)
该文件/vagrant/log/application.log永远不会得到任何输入.如果我command直接执行上述操作,那么正常的gunicorn信息有关启动工作人员的信息:
2013-08-20 14:01:24 [1898] [INFO] Starting gunicorn 17.5
2013-08-20 14:01:24 [1898] [DEBUG] Arbiter booted
2013-08-20 14:01:24 [1898] [INFO] Listening at: http://127.0.0.1:8000 (1898)
2013-08-20 14:01:25 [1898] [INFO] Using worker: sync
2013-08-20 14:01:25 [1903] [INFO] Booting worker with pid: 1903
...
Run Code Online (Sandbox Code Playgroud)
我也试图redirect_stderr在supervisor配置中使用,但也确实使日志文件获取任何信息.
这是一个已知的问题吗?或者我需要一些其他旗帜?(注意应用正在使用gevent,不确定这是否与此问题相关)
我正在尝试同时处理stdout和stderr从subprocess.Popen通过捕获两者的调用处理,subprocess.PIPE但希望在输出时处理输出(例如在终端上打印它们)。
我见过的所有当前解决方案都将等待Popen调用完成以确保捕获所有stdout和stderr,以便可以对其进行处理。
这是一个带有混合输出的示例 Python 脚本,在实时(或尽可能实时)处理它时,我似乎无法复制订单:
$ cat mix_out.py
import sys
sys.stdout.write('this is an stdout line\n')
sys.stdout.write('this is an stdout line\n')
sys.stderr.write('this is an stderr line\n')
sys.stderr.write('this is an stderr line\n')
sys.stderr.write('this is an stderr line\n')
sys.stdout.write('this is an stdout line\n')
sys.stderr.write('this is an stderr line\n')
sys.stdout.write('this is an stdout line\n')
Run Code Online (Sandbox Code Playgroud)
一种似乎可行的方法是使用线程,因为这样读取将是异步的,并且可以按照subprocess产生输出的方式进行处理。
这个只是处理stdoutfirst 和stderrlast的当前实现,如果输出最初在两者之间交替,这可能是欺骗性的:
cmd = ['python', 'mix_out.py']
process = subprocess.Popen( …Run Code Online (Sandbox Code Playgroud)