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

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

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

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

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

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

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

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

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

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

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

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

    所以重点是,某些人吹个毛呀。
    kiwi95
        28
    kiwi95  
       70 天前 via Android   ❤️ 8
    不是,这帖子有谁吹 vim 了吗,楼主只提问,大家都只是提供解决方案,你是第一个吹的

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

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

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

    对程序员来说,编辑功能是 NP 加加那一级别,没必要花钱买这个。不过不得不说,性能真的是目前文本编辑器里的标杆。
    james122333
        41
    james122333  
       69 天前
    @Buges

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

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

    需要权限 而且几乎所有编辑器都不认 block device...
    fuse 好处就是普通 user 权限就可以运行了
    james122333
        50
    james122333  
       69 天前
    @Buges

    vi/vim/nvim/emacs/nano/kate/gedit/vscode/kakoune/scite 不认
    认的我都不讲了没人会想用的...
    james122333
        51
    james122333  
       69 天前 via Android
    看来应该是没了 改天自己造一个轮子
    jack1998
        52
    jack1998  
       69 天前
    split 切一下 在 vim
    feedcode
        53
    feedcode  
       69 天前
    feedcode
        54
    feedcode  
       69 天前
    vim 也提供了 arguments
    -n No swap file will be used.
    feilong
        55
    feilong  
       69 天前 via Android
    vim 不太清楚,不过有个叫 ed 的命令做这个问题可能更合适
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1528 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 23:56 · PVG 07:56 · LAX 16:56 · JFK 19:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.