如果我在 vim 中打开一个大文件(使用这个术语很宽泛,比如 ~1000 行就足够了),然后跳转到某个位置,有时我会得到忽略屏幕外文本的突出显示。例如,如果我跳转到一个大型 while 循环的末尾(在 sh 突出显示中,但我在 C 突出显示中遇到了同样的问题),“完成”将被标记为红色,好像它实际上并没有终止循环。这就像程序没有回溯足够远以正确地将我当前正在查看的内容上下文化。另一方面,如果我转到循环的开头并按“j”向下移动,它将正确突出显示。有什么方法可以解决这个问题吗?
如何Answer.*
使用 vim 从文件中删除所有出现的 并将其粘贴到文件末尾。我可以使用类似sed
或任何其他命令。
1. Lorem ipsum? Answer: lorem
2. Lorem? Answer: ipsum
.....
.....
250000. Dolour? Answer: amet
文件结尾或新文件均可。
逐行粘贴答案
1. Lorem ipsum?
2. Lorem?
.....
.....
250000. Dolour?
1. Answer: lorem
2. Answer: ipsum
.....
.....
250000. Answer: amet
如果为 Vim 编辑器安装了Github Copilot 软件,它会默认启用副驾驶,这可能被视为隐私问题。
我想默认禁用副驾驶,并且仅:Copilot enable
在需要时通过编辑器手动启用它。
我怎样才能做到这一点?
我需要使返回的文本echo $(which bash)
可粘贴到在 Vim 中打开的文本文件中。
令我感到困惑的是,似乎至少有三个剪贴板:
- 系统剪贴板(例如,Command-C > Command-V)
- shell 剪贴板(例如 Control-U > Control-Y)
- Vim 剪贴板(例如,yy > p)
因此,为了完成我的任务,我可以例如键入echo $(which bash) | pbcopy
,打开 Vim,然后按 Command-V。
这是可行的,但我不确定非新手 Vim 用户是否愿意这样做,因为在这种情况下 Vim 会从系统剪贴板读取,而从系统剪贴板读取有很多细微差别:例如,你的 Vim 是否使用特定选项编译,你是否在你的 中有适当的设置.vimrc
,等等。
实现这一目标更正确的方法是什么?
这个 vim 脚本可以正常工作了
#!/usr/bin/vim
%!sed 's/ .*//'
%!sort -fu
norm dd
% norm $D
唯一的问题是最后的这条消息(我必须按键盘中的 ENTER)
"20 lines filtered
20 lines filtered
Press ENTER or type command to continue
"
如何在脚本中模拟ENTER?所以我可以避免手动按下我把它放在脚本的末尾但不起作用
norm <^M>
检查问题的是 sed (产生输出),而不是 vim。如何让 sed 更安静?使用“sed -n”会产生空输出。
尝试使用带有这些行的文本
q
当我在 vim 中在键盘上输入字符时,它会退出 vim。为什么?
今天我尝试编辑一个文件扩展名为.man
. 我想用宏编辑文件,所以我尝试输入- 但当输入qq
第一个时,关闭了!q
vim
vim test.man
这是 Debian 12 上的全新安装。我没有定义.vimrc
。
我将同一个文件重命名.man
为具有扩展名.txt
,这次我可以按预期创建一个宏 - 输入 aq
不会导致vim
退出。
mv test.man test.txt
vim test.txt
为什么在q
尝试编辑带有文件扩展名的文件时输入 a 时 vim 会退出.man
?我该如何阻止这种行为?
所以...我正在使用 Vim(在终端中,而不是任何其他 gui;每当 Vim 单独使用时,假设它是终端 vim)。
Vim 很不错,实际上我并不觉得学习曲线太糟糕。不过,我的效率比使用普通文本编辑器要低一些,这主要是由于在正常模式之间切换的行为。
但 vim 有一点对我来说是致命的。通常,当我在终端中按 Ctrl+Shift+C 时,它会将我突出显示的文本复制到窗口管理器剪贴板,然后我可以将其粘贴。Ctrl+C 和 Ctrl+V(或其变体)在我的系统上使用的每个应用程序中都工作得非常好。
使用 Vim,我可以按 Ctrl+Shfit+V,它会粘贴剪贴板中的数据。但就我而言,Vim 不会复制到全局剪贴板。我努力了...
- Ctrl+Shift+C 在可视模式下
- 同时使用
"*y
and"+y
(或另一个复制命令) - 使用
set clipboard=unnamed
和set clipboard=unnamedplus
- 安装 gvim 以获得“剪贴板支持”(用于终端 vim)并重复其他步骤。
Vim 只是...拒绝复制到剪贴板。
但我有一个想法。我不需要 Vim 复制到剪贴板本身。我只需要它停止阻止/拦截可视模式下 Ctrl+Shift+C 的终端行为。但我对 Vim 还很陌生,我完全不知道如何实现这一目标。我所有寻找这种特定东西的尝试都是相当乏味的。这是我对这种形式的问题:有没有办法让 Vim 允许终端模拟器(Alacritty)使用 Ctrl+Shift+C 复制到它的剪贴板?如果比我更有 Vim 经验的人能给我指点,我将非常感激。
作为参考,我的系统是 Arch Linux,使用 Sway 窗口管理器和 Alacritty 终端模拟器。我见过有关为 Sway 安装剪贴板管理器的各种情况,因为如果您退出从中复制文本的程序,默认的 Sway 不会保留剪贴板数据。然而,我从来没有真正遇到过这个问题;即使我完全退出程序,数据仍然存在。默认剪贴板对我来说工作得很好,我不一定要安装和配置剪贴板管理器只是为了让 vim工作,除非它是唯一的选择。无论如何,这似乎不是问题。
另外,如果有帮助的话,gvim 独立应用程序确实支持复制到剪贴板,但标准终端 Vim不支持。如果可能的话,我真的很想使用终端文本编辑器。但我想如果无能为力的话我只会使用 gvim 应用程序。
我在 中打开了一个文件vim
,并且我已经完成了编辑。有没有办法让我关闭文件(或缓冲区)以使vim
屏幕空白?
我试图理解为什么 VIM 不断将我的 textwidth 重置为 0。
为了创建这个问题,我在 Vim 中打开一个新文件,然后输入:
:set textwidth=72
然后我输入一两句话,我可以看到它确保了文本的宽度永远不会超过 72 个字符。都好。当我使用下面的命令保存文档时,问题就出现了,然后当我重新打开文件时,setwidth 重置为 0。
:wq!
因此,如果我现在重新打开该文件,文本宽度将设置回零。我通过输入以下内容进行确认:
: set textwidth?
结果是 0。这非常烦人。我该如何解决这个问题?
有一个人回复并解决了这个问题。对于任何想知道我到底做了什么的人:
$ touch ~/.vimrc
$ cat > .vimrc << EOF
> set number
> set textwidth=72
> EOF
完成,持久文本宽度。