V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
idblife
V2EX  ›  Linux

如何用 vim 打开一个 10G 的文本。。。

  •  
  •   idblife · 2022-05-31 20:11:25 +08:00 · 9804 次点击
    这是一个创建于 914 天前的主题,其中的信息可能已经有所发展或是发生改变。
    其实就想编辑下前几行
    第 1 条附言  ·  2022-06-01 08:56:33 +08:00
    多等了几分钟搞定了。
    说下载到本机用其他软件打开的,是怪我没介绍全背景,文件是在美国的一台服务器上。。。
    55 条回复    2022-06-02 07:37:09 +08:00
    ltkun
        1
    ltkun  
       2022-05-31 20:17:51 +08:00 via Android
    查看的话 head 编辑的话总要打开才能编辑了吧
    Splatoon
        2
    Splatoon  
       2022-05-31 20:20:35 +08:00   ❤️ 4
    修改内容不多的话,不妨用 awk sed 这类工具。
    James369
        3
    James369  
       2022-05-31 20:20:52 +08:00   ❤️ 2
    dd 一段出来编辑,再 dd 回去
    ltzliwe
        4
    ltzliwe  
       2022-05-31 20:21:41 +08:00   ❤️ 3
    ```
    head -[N] file > small
    vim small
    tail -n +[N+1] > large
    cat small large > result
    ```

    拆掉编辑就可以。。记得先实验一下
    thedrwu
        5
    thedrwu  
       2022-05-31 20:35:14 +08:00 via Android
    关了语法高亮编辑器来很轻松
    20015jjw
        6
    20015jjw  
       2022-05-31 20:47:19 +08:00 via iPhone
    没高亮应该是直接可以编辑吧
    Zerek
        7
    Zerek  
       2022-05-31 20:49:56 +08:00 via Android
    康康 split 命令先给拆出来?
    Alliot
        8
    Alliot  
       2022-05-31 20:51:18 +08:00 via Android
    用 readline 来改。。
    bootvue
        9
    bootvue  
       2022-05-31 20:54:56 +08:00   ❤️ 1
    拆成一堆小文件 或者拉到 windows 下 用 piloedit 编辑 搜索很爽
    codehz
        10
    codehz  
       2022-05-31 21:00:38 +08:00 via Android
    (无论如何,如果改变了开头的长度,后面 10G 的内容都需要重写一遍才可以保存(
    LonnyWong
        11
    LonnyWong  
       2022-05-31 21:04:19 +08:00 via iPhone
    mmap 到内存,用代码来改。
    kiwi95
        12
    kiwi95  
       2022-05-31 21:18:37 +08:00 via Android
    知道哪几行的话 sed 替换下
    darklights
        13
    darklights  
       2022-05-31 21:54:52 +08:00   ❤️ 11
    ----- 以下跟楼主无关 -----

    每次看到有人吹 vim 的大文件性能就想吐。本以为吐着吐着就惯了,没想到吃饱饭后看到还是会吐。

    打开 900m 的纯 txt 占用 1G 内存,编辑操作会不会卡死完全看运气,保存文件整个重写,gVim 甚至连最基本的滚动都能跑满一个核卡死,管这叫“很轻松”?对,vim 非常牛非常叉,程序员的神器,然而但是不过完全没有对大文件有任何针对优化。

    那些 L/V 吹,找台 Windows 的机器,装个 emeditor ,看看有针对性优化的编辑器长什么样子:编辑机械盘上的 1G 文件吊打 vim 编辑 ssd 上的 1G 文件,分块保存,而且只需 300m 内存。

    ----- 以上跟楼主无关 -----
    pagxir
        14
    pagxir  
       2022-05-31 22:05:57 +08:00 via Android
    装个 hexedit 吧,文本编辑器本来就不是用来编辑二进制文件的
    HankLu
        15
    HankLu  
       2022-05-31 22:08:23 +08:00   ❤️ 2
    啥文本?不会是裤子吧
    documentzhangx66
        16
    documentzhangx66  
       2022-05-31 22:25:11 +08:00   ❤️ 3
    这事本质与 Linux 哲学有关。Linux 哲学是一个 exe 只做一件事,这样可以高复用+高度解耦地模块化。但问题是,高性能的东西是另一个极端,需要高耦合才行。
    ufan0
        17
    ufan0  
       2022-05-31 23:10:51 +08:00
    借楼问下 vscode

    依稀记得 16/17 年那会儿,vscode 打开 200MB 的 txt 响应速度非常快,现在打开 100MB 的 txt 都非常缓慢甚至卡,请问你们有遇到这样的问题吗?

    16/17 年用的处理器是 intel i7-6700HQ ,现在用的处理器是 intel11 代和 m1 。
    searene
        18
    searene  
       2022-05-31 23:11:57 +08:00
    一般情况下,打开大文件一开始要等待,这是因为 vim 在做语法检测之类的事情,直接按一下 ctrl + c 终止就可以看到文件内容了,可以试一下
    imycc
        19
    imycc  
       2022-05-31 23:20:49 +08:00
    如果知道修改的模式,比如删除或替换指定内容,可以用 sed ,指定行数来修改。

    还有一个没试过的办法,把你的.vimrc 备份后挪走,用不加载任何插件跟配置的情况下打开试试
    swsh007
        20
    swsh007  
       2022-05-31 23:30:17 +08:00 via Android
    跟 vi 没啥关系
    跟 buffer 有关
    早年 32 位的 UltraEdit 就快的很
    可惜越来越慢了
    raykle
        21
    raykle  
       2022-06-01 00:12:09 +08:00
    @ufan0 #17 插件装多了?
    muzuiget
        22
    muzuiget  
       2022-06-01 02:10:09 +08:00
    二进制模式 vim -b file
    ETiV
        23
    ETiV  
       2022-06-01 04:18:21 +08:00   ❤️ 1
    vim -u NONE file

    然后多等等才能打开;保存的时候也是:多等等。。。
    kiwi95
        24
    kiwi95  
       2022-06-01 05:15:55 +08:00 via Android
    @darklights 只能说设计目的不一样,为啥要拉踩呢,emeditor 我大概 10 年前有过一段时间没坚持用下去,确实有优点但还是小众软件
    darklights
        25
    darklights  
       2022-06-01 05:45:19 +08:00
    @kiwi95 我可没有踩 vim 。“vim 非常牛非常叉,程序员的神器”,请默念三遍。事实上 vim 的 line buffer 写的非常牛叉,即使没有针对大文件优化,手动关闭一些特性,打开 1G 的文件也能凑合使用。相比之下 Atom 之流基于 line buffer 的编辑器的 model 部分跟玩具一样,扫两眼就能看个大概,而 Vim 的那个代码看的我两眼发黑都没弄明白。
    lishuolin
        26
    lishuolin  
       2022-06-01 06:01:53 +08:00 via iPhone
    EmEditor 无论多大都秒开
    darklights
        27
    darklights  
       2022-06-01 06:20:53 +08:00 via Android
    书接上回:但终究只是本身性能好,顺带能打开 1G 文件凑合用,跟 EditPlus 、NP 加加差不多。跟专门用内存映射做大文件支持的编辑器,差距肉眼可见。

    所以重点是,某些人吹个毛呀。
    kiwi95
        28
    kiwi95  
       2022-06-01 07:12:05 +08:00 via Android   ❤️ 8
    不是,这帖子有谁吹 vim 了吗,楼主只提问,大家都只是提供解决方案,你是第一个吹的

    @darklights
    duyaofei
        29
    duyaofei  
       2022-06-01 08:03:58 +08:00
    先 split ,然后 vim
    或者下载到 windows ,用 EmEditor
    RickyC
        30
    RickyC  
       2022-06-01 08:51:29 +08:00
    花钱买 UltraEdit 呀
    276562578
        31
    276562578  
       2022-06-01 09:07:57 +08:00   ❤️ 1
    之前仗着自己内存大,开了个 50G 的文本,最后编辑起来 emmmmmm ,老老实实用 sed 、awk 、head 、tail
    kiwi95
        32
    kiwi95  
       2022-06-01 10:14:52 +08:00 via Android
    @276562578 刚入职前司时在容器内 vim 查看日志,直接 oom 把实例搞挂了。从此打开不了解的文件都先看下大小
    crazycookie
        33
    crazycookie  
       2022-06-01 10:17:09 +08:00
    语法不高亮,关闭插件,普通编辑的话,问题不大,但是你机器内存要大
    最大的干过 20G 左右的,直接编辑,sql 文件
    darklights
        34
    darklights  
       2022-06-01 11:02:45 +08:00 via Android
    @kiwi95 OK ,没人吹,确实用 vim 编辑 20g 的文件“很轻松”,怪我昨晚吃得太饱,反应太敏感。我认错。
    james122333
        35
    james122333  
       2022-06-01 11:14:19 +08:00
    @pagxir
    vim 可以 16 进制编辑

    回一下楼主的 基本上楼上很多人讲的都很耗能
    以下这个才是最好的解法
    https://sourceforge.net/projects/joinsplitfs
    user 权限秒挂载 编辑后卸载(fusermount -u)就可以

    大而全才会要求 vim 本身来解决 然而 vim 本身就可以调用外部工具
    singerll
        36
    singerll  
       2022-06-01 11:14:42 +08:00
    既然是文本文件,直接压缩下试试,可能就剩几百兆了,传到本机再解压编辑。
    NeezerGu
        37
    NeezerGu  
       2022-06-01 11:23:13 +08:00
    @darklights 这个, 订阅制次年 20 刀一年有点小贵啊……
    eephee
        38
    eephee  
       2022-06-01 14:05:00 +08:00 via iPhone
    这里没人吹 vim ,只有人叫别人不要吹 vim 。
    Buges
        39
    Buges  
       2022-06-01 14:12:09 +08:00 via Android
    @james122333 这倒是个不错的思路,直接用 loop device 和 device mapper 那一套也可以实现映射访问特定的 offset 和 size 。
    darklights
        40
    darklights  
       2022-06-01 14:38:37 +08:00
    @NeezerGu 有个人免费版。我也只是以前因为手头上的编辑器搞不掂而用过,下载,安装,真•“很轻松”的搞掂,卸载,然后愉快的打开 d:\学习资料\日语视频

    对程序员来说,编辑功能是 NP 加加那一级别,没必要花钱买这个。不过不得不说,性能真的是目前文本编辑器里的标杆。
    james122333
        41
    james122333  
       2022-06-01 15:00:32 +08:00
    @Buges

    可惜这个项目分割大小有固定容量限制 写多该分割块会有问题 再找找有没有其他现成的 不然 fuse 其实很不错
    cassyfar
        42
    cassyfar  
       2022-06-01 15:02:45 +08:00
    @kiwi95 总有人喜欢虚空打靶,举起石头砸脚
    cassyfar
        43
    cassyfar  
       2022-06-01 15:05:12 +08:00
    可以用 sed ,不行就多等下 vim ,
    再不行可以装个 virt-manager 起个 windows 再装个 emeditor 应该也可以秒解决
    Buges
        44
    Buges  
       2022-06-01 15:39:52 +08:00 via Android
    @james122333 可以直接用 losetup 指定 offsset 和 size 映射特定区域,就是映射出来的文件会被识别成设备文件,可能一般编辑器不让编辑。
    gengchun
        45
    gengchun  
       2022-06-01 15:45:07 +08:00   ❤️ 1
    一般来说,其实用 less/sed 也足够了。因为不可能是真的打开文件写代码。具体到这种大文件操作,没有必要用 vim ,本身服务器上的操作也不建议用 vi/vim 这种进行。要运维类 Unix 系统,学习一下 sed 这类工具还是值得的。而且确实是 CS 必修的东西。

    这种事情争论编辑器性能就很奇怪了,甚至要推广一个比 emacs 还小众的,只支持 windows 操作系统的编辑器就很奇怪了。
    tomychen
        46
    tomychen  
       2022-06-01 15:51:42 +08:00
    看到大文件,不知道我为啥第一反映就是 UltraEdit
    tunzao
        47
    tunzao  
       2022-06-01 16:22:49 +08:00   ❤️ 1
    sed
    jheroy
        48
    jheroy  
       2022-06-01 16:34:02 +08:00   ❤️ 2
    用 vim 特别简单: vim '+%!head -10' xxx.log 把 10 改成你想要的行数就行.
    james122333
        49
    james122333  
       2022-06-01 17:05:32 +08:00
    @Buges

    需要权限 而且几乎所有编辑器都不认 block device...
    fuse 好处就是普通 user 权限就可以运行了
    james122333
        50
    james122333  
       2022-06-01 17:58:30 +08:00
    @Buges

    vi/vim/nvim/emacs/nano/kate/gedit/vscode/kakoune/scite 不认
    认的我都不讲了没人会想用的...
    james122333
        51
    james122333  
       2022-06-01 20:18:28 +08:00 via Android
    看来应该是没了 改天自己造一个轮子
    jack1998
        52
    jack1998  
       2022-06-01 22:14:18 +08:00
    split 切一下 在 vim
    feedcode
        53
    feedcode  
       2022-06-01 22:58:31 +08:00
    feedcode
        54
    feedcode  
       2022-06-01 23:01:49 +08:00
    vim 也提供了 arguments
    -n No swap file will be used.
    feilong
        55
    feilong  
       2022-06-02 07:37:09 +08:00 via Android
    vim 不太清楚,不过有个叫 ed 的命令做这个问题可能更合适
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2397 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 02:03 · PVG 10:03 · LAX 18:03 · JFK 21:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.