在 Vim 中,我有以下文本:
门 椅子 桌子 乌干达
我想在每个奇数行上添加编号文本,这应该给出:
>item1
Door
>item2
Chair
>item3
Table
>item4
Uganda
Run Code Online (Sandbox Code Playgroud)
这在vim中可能吗?
我有一系列段落——一个 java 线程转储——我想删除,但只有当段落包含文本 / Executor\.getTask/ 时——也就是说,线程没有任务。
我怎样才能在 vim 中做到这一点?我目前有一个包含内容的宏/Executor\.getTask^Mvipd,但这意味着我必须按@@几千次——这是一个大的线程转储。我希望有一种方法可以global用来做到这一点。
这是一个示例段落。
"xyz-1376" prio=10 tid=0x00002aedbc289000 nid=0x6cdf waiting on condition [0x00002aedd221f000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x0000000434ca6d48> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1085)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:807)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Run Code Online (Sandbox Code Playgroud) 我在 Vim 中的典型日常工作流程包括两个垂直窗格;左边是生产代码,右边是测试。
我经常切换语言(和测试框架),所以我喜欢创建一个新的映射来在每个会话中运行我的测试代码。假设我正在做一些 Ruby 项目并且我正在lib/importer.rb. 随附的规范位于spec/lib/importer_spec.rb.
要创建用于运行规范的映射,我将关注显示规范的窗格,然后输入以下内容:
:nnoremap -g :!rspec %<cr>
Run Code Online (Sandbox Code Playgroud)
注意:我使用连字符/减号作为我的主键。
这有效,但仅当我点击时规范窗格具有焦点-g。如果生产窗格具有焦点并且我点击了映射,则rspec将尝试运行生产代码,这是没有意义的。
要解决此问题,我可以将绝对路径写入规范文件:
:nnoremap -g :!rspec spec/lib/importer_spec.rb<cr>
Run Code Online (Sandbox Code Playgroud)
这行得通,虽然写起来有点麻烦。
昨晚在阅读Practical Vim 时,我意识到在命令模式下你可以使用%扩展——你写%然后点击tab,百分比被替换为当前聚焦窗格中文件的绝对路径。
如果我这样做:
:!rspec %
Run Code Online (Sandbox Code Playgroud)
……然后点击tab,我明白了:
:!rspec spec/lib/importer_spec.rb
Run Code Online (Sandbox Code Playgroud)
这太棒了!但是,如果我这样做:
:nnoremap -g :!rspec %
Run Code Online (Sandbox Code Playgroud)
……然后点击tab,我明白了:
:nnoremap -g :!rspec %^I
Run Code Online (Sandbox Code Playgroud)
我是个好人,我纳税。为什么这会发生在我身上?
我无法正确显示 vim-airline 插件。
这就是它的样子
这是它目前的样子。

请注意>, 显示不正确。
我尝试了 vim-airline FAQ 上的第一个修复程序,没有任何变化。
每次我尝试编辑文件时,我都会mvim file.txt在终端中进行,然后会弹出一个新的 MacVim 窗口。但如果我这样做vim file.txt,它不会打开一个新窗口。相反,它将在终端内初始化 vim。
问题:我如何确保当我这样做时mvim file.txt,MacVim 将在终端内打开,就像我使用vim.
我已经尝试了以下解决方案,但它不起作用。
我有一个自定义的 Vim 配置,我一直在组合它。有许多很酷的插件和功能可以帮助 PHP 开发。但是,当我打开一个大文件(几千行)时,这些功能会使 vim 爬行。
我目前正在做的是将 .vimrc 重命名为 .vimrc-然后在处理这些大文件时重新启动 vim,这样我就有了默认配置。我想做的是在 vimrc 之间切换而不必离开 vim。认为这可能吗?这有点像在更改后获取 .vimrc,但我需要获取另一个文件来覆盖我的默认配置。
我希望 vimmakeprg使用两个命令运行,即:cd\ cmt;make;
但是当我这样做时,它会卡在 make 命令上。
澄清一下,当我的意思是卡住时,我的意思是它结束编译但它没有返回到vim,我需要点击 Cc 来取消编译,但它也破坏了编译器的编译日志解释,我无法得到在cwin与编译错误解释。
有任何想法吗?
比如我试图寻找二者的发生hello world,并goodbye world在同一直线上。我已经尝试了一堆不同的迭代。例如,如果你想找到一个多字串,你可以把它放在括号里,/\<hello world\>但我不知道如何对多个多字串进行多次检查
我试过了
/\<\(hello world \& goodbye world\)\>
这也不是
/\<hello world\>\&\<goodbye world\>
我使用https://github.com/Anthony25/gnome-terminal-colors-solarized为 gnome 终端安装了日光化黑暗主题,然后安装了Vundle https://github.com/altercation/vim-colors-solarized。我将这些行添加到我的.vimrc:
try
" Solarized options
let g:solarized_term = 1
colorscheme solarized
catch
endtry
set background=dark
Run Code Online (Sandbox Code Playgroud)
我也在使用使用 Vundle 安装的https://github.com/bling/vim-airline。
问题是在普通模式下 vim-airline 看起来不太好(文本很难阅读):

在我的 Mac 上使用几乎相同的设置,它看起来非常好:

如何让我的 Gnome 终端上的 vim 看起来像在我的 Mac 上一样?
我已经知道您可以使用以下命令复制寄存器的内容:(加上 yank、delete 等命令)
"a
Run Code Online (Sandbox Code Playgroud)
我也知道您可以使用以下方法附加到 a 寄存器:
"A
Run Code Online (Sandbox Code Playgroud)
此外,我了解如何使用以下方法将某些内容复制到剪贴板寄存器:
"+
Run Code Online (Sandbox Code Playgroud)
问题这里是我输入什么来附加到剪贴板寄存器?
编辑: 这可能不是必需的,但我的 VIM 版本是:
Vi IMproved 7.4(2013 年 8 月 10 日,编译于 2014 年 1 月 2 日 19:39:59)带有 GTK2 GUI 的巨大版本。