我经常在vim中编辑长文件,这些文件在文件中的多个不同位置都有代码块,我需要经常在它们之间来回切换.显然,解决这个问题的一种方法是将窗口拆分为:拆分并编辑不同拆分窗口中的每个部分,并且:w在任一窗口中都将保存整个文件.如果你有一个足够大的屏幕,这是好的,但有时我必须在低分辨率的笔记本电脑上使用vim,我不想通过分割窗口进一步减少我的屏幕空间.
在这种情况下,我真正想做的是在多个选项卡中编辑文件,并将每个单独的选项卡视为单独的视图拆分.我可以通过使用:tabopen <the same filename>一次打开文件的一个副本来模仿这个,但这有点hacky - 如果我已经对文件进行了更改,它就无法工作,因为vim认为我只是打开文件第二次.
有没有一个很好的方法来获得我想要的行为在vim中的标签?
我正在尝试以交互方式在ghci中创建一个do块.只要我没有在块中定义变量,就可以了:
Prelude>let a = do putStrLn "test"; putStrLn "other test"
Prelude>
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何在交互式地在do块中定义let构造而不会出现解析错误:
Prelude> let a = do let b = 5; putStrLn $ show b
<interactive>:2:40:
parse error (possibly incorrect indentation or mismatched brackets)
Run Code Online (Sandbox Code Playgroud)
明显
let a = do
let b = 5
putStrLn $ show b
Run Code Online (Sandbox Code Playgroud)
在Haskell源文件中完全没问题.我只是在弄清楚如何将其翻译成ghci.
在objective-c中,我可以做类似的事情
@interface MyViewController : UIViewController <UITextInputDelegate>
Run Code Online (Sandbox Code Playgroud)
为实现UITextInputDelegate协议的类MyViewController创建规范.现在,这个协议有几个必需的方法,所以我认为编译器根本不会让代码编译,除非这些方法确实在.m文件中实现了.无论如何,这编译.编译器会发出 spout 警告,所以很明显它检测到我没有实现所需的方法,但我想知道为什么在语言设计器方面允许这个编译是有意义的.
这是我的全部代码:
#include "CImg.h"
#include <iostream>
using namespace cimg_library;
int main() {
CImg<float> image(100,100,1,3,0);
const float color[] = {1.0,1.0,0.0};
image.draw_point(50,50,color);
image.save("file.bmp");
CImgDisplay local(image, "Hah");
while (true) {
local.wait();
}
}
Run Code Online (Sandbox Code Playgroud)
这成功地显示了我在窗口中所期望的内容,即一个白色像素为50,50的完全黑色正方形.但是,file.bmp只是一个黑色正方形,没有那个像素(并且保存了一个cimg图像,该图像已经通过在较大的程序中重复调用draw_point而修改,该程序执行一些有用的操作也会失败).这里发生了什么?
我不完全确定 git 如何实现签出,但大概它是删除磁盘上的文件(对应于工作副本),并将文件从其内部表示写入工作副本。所以在我看来,如果你的项目有很多文件,那么就磁盘 I/O 而言,git checkout 应该是一件昂贵的事情。但通常似乎不需要那么长时间(尽管也许我只是使用足够小的存储库,因此这并不重要)。那么 git 是否以比我想象的更智能的方式做到这一点,或者这里是否还有其他考虑因素,或者实际上 git checkout 很昂贵而我只是没有注意到,因为我有很好的硬件够用吗?
我有一些代码我想在GPL v3下获得许可.FSF建议的标题是:
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more …Run Code Online (Sandbox Code Playgroud) 我在项目的同一目录中有一个带复选标记的图像作为.png,名为"checkbox.png".我想用该图像作为背景创建一个UIImageView,并将其设置为一组UITableViewCells的附件视图.我目前有:
UIView * v = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:@"checkmark.png"]];
v.backgroundColor = [UIColor redColor];
cell.accessoryView = v;
[v autorelease];
Run Code Online (Sandbox Code Playgroud)
哪个不行.我可以制作另一个虚拟UIView(例如
v = [[UIView alloc] init];
v.backgroundColor = [UIColor redColor];
Run Code Online (Sandbox Code Playgroud)
哪个工作正常,它在我的uitableviewcells的右侧显示一个小红框.我不确定为什么带有复选框的视图不起作用.我指定文件路径的方式有问题吗?
所以我写了一个玩具C程序,故意造成堆栈溢出,只是为了解决我的系统限制:
#include <stdio.h>
int kefladhen(int i) {
int j = i + 1;
printf("j is %d\n",j);
kefladhen(j);
}
int main() {
printf("Hello!:D\n");
kefladhen(0);
}
Run Code Online (Sandbox Code Playgroud)
我惊讶地发现在分段错误之前打印的最后一行是"j是174651".当然,每次运行时它的确切数量都会有所变化,但总的来说,令我惊讶的是,在我的4GB linux笔记本电脑上进行处理耗尽了17,000多个堆栈帧就足以耗尽内存.我认为也许printf会产生一些开销,但printf会在我以递归方式调用kefladhen()之前返回,所以堆栈指针应该回到之前的位置.我每次调用只存储一个int,所以每个堆栈帧总共应该只有8个字节,对吧?所以它们中有174,000多个只有大约一兆字节和一半的实际内存,这对我来说似乎很低.我在这里误解了什么?
假设我有一个Objective-c .m文件,定义了以下方法:
- (void) doOneThing {
[self doAnotherThing];
}
- (void) doAnotherThing {
[self stillOtherThings];
}
Run Code Online (Sandbox Code Playgroud)
如果我编译它,xcode会向我发出警告,该类可能不响应-doAnotherThings,因为doAnotherThing定义在-doOneThing下面,并且编译器在编译-doOneThing时还不知道-doAnotherThing.当然,代码编译正确并且确实有效,但我想摆脱那条警告信息.
解决这个问题的简单方法是在-doOneThing之前定义-doAnotherThing,但有时我喜欢在源代码中对相关方法进行分组,使其难以重新排序.如果这是C,我可以这样做:
void doAnotherThing();
void doOneThing() {
doAnotherThing();
}
void doAnotherThing() {
...still other things...
}
Run Code Online (Sandbox Code Playgroud)
将定义与声明分开.有没有办法在objective-c中做这样的事情,或以其他方式解决我的问题?
我正在尝试以UIBarButtonItem编程方式从底部工具栏添加2 秒UIViewController.现在我正在创建按钮,将它们添加到a NSArray,然后调用[self setToolbarItems:buttonArray animated:YES].这会将按钮添加到工具栏的左下角,彼此相邻.我想要做的是在工具栏的左下角添加一个按钮,在右下角添加另一个按钮.我该怎么做呢?
我在C中乱搞FUSE,我想创建一个看起来将在未来创建的文件.我在FUSE中编写的自定义stat()函数写入struct stat*stbuf,我想做类似的事情
stbuf->st_ctime = (1 << 39) - 1;
Run Code Online (Sandbox Code Playgroud)
为了创造一个创造日期,将来会有一段荒谬的时间.
我在64位Linux系统上运行它,所以我希望我的time_t是64位值,实际上,如果我只是printf("%d \n",(int)sizeof(x)); 为了测试我的程序中time_t的大小,我得到8.然而,当我编译我的代码并打开警告时,我得到了
warning: left shift count >= width of type [enabled by default]
Run Code Online (Sandbox Code Playgroud)
以及我在安装的文件系统中统计文件时的更改时间
1969-12-31 15:59:59.000000000 -0800
Run Code Online (Sandbox Code Playgroud)
好像实际值是0.有谁知道为什么这应该发生在一个应该有64位time_t的64位系统上?