我已经打开了两个文件.它们以垂直模式打开,旁边是下一个.我可以在不离开或关闭Vim的情况下立即区分这两个文件吗?
我写了一个插件来解析XML标签.标签内的内容是缩进的,当我将解析后的字符串复制到文件中时,它的内容如下:
Example line
This is part of the parsed line
Thats goes one
End of line
Run Code Online (Sandbox Code Playgroud)
我想要的是删除这些行前面的所有空格,最终文本应该是
Example line
This is part of the parsed line
Thats goes one
End of line
Run Code Online (Sandbox Code Playgroud)
我试过用=它但是它不能按照我想要的方式工作.如何用最小的击键来做到这一点?
如果我有一个进程的PID,os.FindProcess是否足以测试现有的进程?我的意思是,如果它返回err我可以假设它已终止(或被杀死)?
编辑:
我刚刚编写了一个包装函数kill -s 0(旧式bash进程测试).这没有任何问题,但我仍然很高兴,如果有其他解决方案(使用go库完成)这个问题:
func checkPid(pid int) bool {
out, err := exec.Command("kill", "-s", "0", strconv.Itoa(pid)).CombinedOutput()
if err != nil {
log.Println(err)
}
if string(out) == "" {
return true // pid exist
}
return false
}
Run Code Online (Sandbox Code Playgroud) 一般来说,我使用PEP-8中规定的标准命名作为变量.喜欢:
delete_projects
connect_server
Run Code Online (Sandbox Code Playgroud)
但有时我找不到任何好名字,名称只会扩展到一个长名称:
project_name_to_be_deleted
Run Code Online (Sandbox Code Playgroud)
我可以使用pr_nm_del,但这使代码不可读.我真的很痛苦为函数找到好的变量名.每当我开始编写新函数时,我只是花时间找到一个好的变量名.
是否有任何标准为众所周知的变量名称选择某些缩写,如delete,project,configuration, etc.?你如何选择简短但又好又可读的变量名?
这个问题可能不直接依赖于Python,但由于不同的编程语言使用不同的变量名称格式,我认为我只将此问题限制为Python.
我正在将IPv4应用程序移植到与AF无关的代码库(它应该与IPv4和IPv6一起使用).现在我在任何地方都使用sockaddr_storage,但是现在我必须设置(填充)一个sockaddr_storage.但我不知道正确的方法是什么.以前的代码是:
// defined in data_socket.h
struct sockaddr_in laddr;
Run Code Online (Sandbox Code Playgroud)
现在有这个函数设置sin_addr和sin_port:
void DataSocket::SetLocalAddr(const char *addr, const int port)
{
this->laddr.sin_port = htons(port);
if(addr != NULL)
this->laddr.sin_addr.s_addr = inet_addr(addr);
else
this->laddr.sin_addr.s_addr = inet_addr("0.0.0.0");
}
Run Code Online (Sandbox Code Playgroud)
如您所见,这是旧样式(使用IPv4).
现在我的变化如下.首先我改变sockaddr_in了sockaddr_storage
// defined in data_socket.h
struct sockaddr_storage laddr;
Run Code Online (Sandbox Code Playgroud)
然后我更改了上面的代码以支持IPv4和IPv6:
void DataSocket::SetLocalAddr(const char *addr, const int port)
{
switch (this->GetAddrFamily(addr)) {
case AF_INET:
(struct sockaddr_in *) this->laddr.sin_port = htons(port);
if(addr …Run Code Online (Sandbox Code Playgroud) 我有内容存储在out我想用当前缓冲区替换的variable()中.我现在正在这样做(简化版):
let splitted = split(out, '\n')
if line('$') > len(splitted)
execute len(splitted) .',$delete'
endif
call setline(1, splitted)
Run Code Online (Sandbox Code Playgroud)
(详细:https://github.com/fatih/vim-go/blob/master/autoload/go/fmt.vim#L130)
但是setline()这会导致某些机器的速度变慢,并且https://github.com/fatih/vim-go/issues/459.我自己也对它进行了描述,但对我来说,setline不是问题.无论如何,我需要一个更快的解决方案.所以我想出了其他几个解决方案.
第一个是将输出放到寄存器中,删除所有行然后将其放回:
let @a = out
% delete _
put! a
$ delete _
Run Code Online (Sandbox Code Playgroud)
第二个解决方案是使用append()(之前在vim-go https://github.com/fatih/vim-go/commit/99a1732e40e3f064300d544eebd4153dbc3c60c7中使用过):
let splitted = split(out, '\n')
%delete _
call append(0, splitted)
$delete _
Run Code Online (Sandbox Code Playgroud)
他们都工作!然而,它们都会引起副作用,我仍然无法解决,也写在标题中.问题描述如下:
如果在另一个视图中打开缓冲区(比如旁边的那个),我们调用上面两个解决方案中的一个,它会打破另一个视图的光标并跳转到底部
这是一个更好的GIF(每当我调用:w上面的一个程序时):http://d.pr/i/1buDZ
有没有办法,替换缓冲区的内容,这是快速的,不会打破布局?或者我如何使用上述程序之一阻止它?
谢谢.
我有几种方法可以用于某些情况(如Add,Delete等).然而,随着时间的推移,案件的数量正在增加,我的开关箱也越来越长.所以我想我会创建一个方法图,比如Go函数图 ; 这里功能的映射是微不足道的.但是,是否可以在Go中创建方法地图?
当我们有一个方法:
func (f *Foo) Add(a string, b int) { }
Run Code Online (Sandbox Code Playgroud)
下面的语法创建编译时错误:
actions := map[string]func(a, b){
"add": f.Add(a,b),
}
Run Code Online (Sandbox Code Playgroud)
是否可以在Go中创建方法地图?
我正在使用Python从Web服务收集数据.数据本身是一个将呈现给用户的列表.我已经设法将它打印出来像:
( 1) Example of strings
( 2) Example 4
( 3) Another Example
( 4) Another Example 2
Run Code Online (Sandbox Code Playgroud)
我正在使用rjust(2)来表示数字.但是,如果线条很长,打印就会像.断开宽度是终端的长度(rxvt,gnome-terminal):
( 1) Example of a very very very very long string and
that doesn't look fine
( 2) Example of indented long line that is very very
long, example line
( 3) Another Example
( 4) Another Example of a very very long string and
whatever here is
Run Code Online (Sandbox Code Playgroud)
但我想要的是打印出来像:
( 1) Example of a very very very very long string …Run Code Online (Sandbox Code Playgroud) 可能重复:
将.vim主目录设置为特定的内容
关于设置工作目录已经存在一个问题:如何在Vim中设置工作/当前目录?但是我的问题有点不同,我在一个文件夹中有几千个文件(几个不同的项目).每当我启动Vim(MacVim)时,cwd默认设置为home dir.因此,当我使用像ack.vim这样的插件时,默认情况下它们在我的家庭目录中搜索是没用的.我只想将它设置为我的/ home/user/Code文件夹(包含我所有的片段,项目等).
是否有任何设置将cwd设置为某个目录?或者任何变通办法(比如:cd /home/user/Code在Vim中为每个创业公司执行?
我正在为Web待办事项列表服务开发CLI。我已经完成了后端工作,并且刚刚开始编写CLI函数。在开始之前,我将介绍存储用户数据的最佳方法是什么。我正在使用ConfigParser来存储用户指定的偏好。这些存储在中~/.confrc。
用户数据采用Json的形式。我在我的项目中使用Python。我以以下形式获得这些:
{"user_id": 1, "name": "Project_name", "color": "#ff8581", "collapsed": 0, "item_order": 1, "cache_count": 13, "indent": 1, "id": 455831}
Run Code Online (Sandbox Code Playgroud)
我是否应该将此数据存储到配置文件中,该文件将通过ConfigParser处理?起初这可能是个好主意,但是一个项目可能具有另一个项目使用的名称。因此,我无法通过RawConfigParser.set()存储它们。我可以通过id存储它们,因为它们是唯一的,但是conf文件本身会很混乱。
存储简单的待办事项用户数据的最佳方法是什么?
我有两个(但后来我将是三个)去处理来自远程服务器(来自ampq通道)的传入消息的例程.但是因为它们正在处理相同的数据/状态,所以我想阻止所有其他的例程,除了正在运行的例程.
我想出了一个解决方案,使用chan bool每个例程阻塞然后释放它的代码,代码如下:
package main
func a(deliveries <-chan amqp, handleDone chan bool) {
for d := range deliveries {
<-handleDone // Data comes always, wait for other channels
handleDone <- false // Block other channels
// Do stuff with data...
handleDone <- true // I'm done, other channels are free to do anything
}
}
func b(deliveries <-chan amqp, handleDone chan bool) {
for d := range deliveries {
<-handleDone
handleDone <- false
// Do stuff with data... …Run Code Online (Sandbox Code Playgroud) vim ×4
go ×3
python ×3
indentation ×2
c++ ×1
configparser ×1
diff ×1
formatting ×1
ip-address ×1
ipv6 ×1
macvim ×1
methods ×1
printing ×1
process ×1
sockets ×1
syntax ×1
vim-plugin ×1
vimdiff ×1