在vim,如果我从命令行执行以下操作
:normal! i
Run Code Online (Sandbox Code Playgroud)
vim不进入插入模式.同样的命令
:normal! A
Run Code Online (Sandbox Code Playgroud)
将光标移动到行尾,但光标仍处于插入模式.
任何想法为什么这不起作用?如果不这样,我想知道从vimscript函数的主体进入插入模式的另一种方法(并且当函数返回后,插入模式仍然存在).
编辑:看起来:startinsert会填满问题的第二部分,但我仍然想知道我怎么能做类似的事情:normal! A,:normal! a以及为什么那些不能简单地按预期工作.用箭头运动模拟"附加"是一个糟糕的解决方案,因为像空行等等.
我想是绘制一个关键,例如F4,以便按F4将切换搜索亮点的知名度,并让开始新的搜索能够知名度,无论现在的知名度.
我尝试过的:
:nohlsearch不关闭hlsearch设置的情况下暂时禁用高亮显示,但不会再次切换可见性.:set hlsearch!打开/关闭,但我不想切换hlsearch设置,只是切换可见性设置.如果hlsearch关闭则不会自动返回新搜索.似乎没有相反的形式,:nohlsearch并且命令本身在从函数调用时存在问题.
我发现了类似的问题,但他们没有提供答案.
更新:
第一条评论提供了我要求的内容,转载如下:
let hlstate=0
nnoremap <F4> :if (hlstate == 0) \| nohlsearch \| else \| set hlsearch \| endif \| let hlstate=1-hlstate<cr>
Run Code Online (Sandbox Code Playgroud)
(对于任何使用此功能的人来说都是这样的 - 将地图填充到一行而不是使用功能是必要的,因为您无法对功能内部的突出显示进行更改.)
相关问题略有不同的功能:https: //stackoverflow.com/a/16750393/1176650
在Windows上,GHC与gcc和g ++一起发布,例如在ghc-7.6.3\mingw\bin.从下载页面,在Windows二进制下载中也注意到,Windows的构建"还包括对编译C++文件的支持."
我可以想象,分发这些编译器只是为了方便,因为Windows没有附带任何编译器.我还可以想象使用FFI 是必要的,但我不是百分百肯定的.例如,尽管GHC将使用它自己的gcc/g ++编译器编译.c和.cpp文件,但GHC还提供了选择所需编译器和链接器的选项.事实上,你可以指定自己的gcc/g ++,它似乎有效.你甚至可以切GHC圈外远一点的通过编译.C/.cpp文件提前,并且只调用GHC编译Haskell代码,并使用链接这一切-pgml(虽然整体效果是一样的使用-pgmc和-pgml) .
现在这似乎有效,但它是否依赖于您指定的纯运气-pgml并-pgmc成为与GHC所考虑的兼容的gcc版本?换句话说,当我使用FFI时,我真的只应该编译并用GHC调用链接所有内容吗?
我尝试安装UltiSnips插件,但是当加载Vim时会产生一些错误:
Error detected while processing C:\Documents and Settings\username\vimfiles\bundle\UltiSnips-2.2\plugin\UltiSnips.vim:
line 226:
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named os
line 229:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Documents and Settings\username\vimfiles\bundle\UltiSnips-2.2\pl
ugin\UltiSnips\__init__.py", line 4, in <module>
from functools import wraps
ImportError: No module named functools
line 230:
Traceback (most recent call last):
File "<string>", line 1, in <module>
NameError: name 'UltiSnips_Manager' is not defined
line 231:
Traceback (most …Run Code Online (Sandbox Code Playgroud) :source在带有dos行结尾的vimscript文件上使用vim的命令会给我带来错误,它无法处理^M字符.
该^M字符的DOS行结束的一部分,而不是Unix行结尾.所以它正在尝试:source使用unix文件格式的文件.
问题是,我已经:set fileformats=unix,dos开始了.当打开并编辑文件(不:source:-ing)没有结束的问题行.Vim看到一个带有纯dos行结尾的文件,并根据fileformats它调整自己.
:help fileformats只给出最简单的线索,如果你有dos系统:set fileformats=unix,dos,vim执行它应该使用的临时检测(并且作为一个不相关的细节,这个:source检测处理混合行结尾不同于打开文件).
我在一个现代的mac系统上,如何将它:source输入dos行结束文件?
据我所知,w通过将文本分成3组来识别单词边界:
1)iskeyword设置中指定的字符(字母,数字和下划线)
2)其他不可打印的字符(符号)
3)空白字符
每次按下w它都会转到下一组1或组2.我想自定义它,因此它只会转到下一组1,跳过"符号字".
几乎有用的是:
nnoremap w /\k\+<CR>
它使用了iskeyword字符类\k.但它很难看,因为它模拟我进行搜索,这会改变我的突出显示,使我的搜索历史变得混乱,谁知道还有什么.有没有办法让这项工作"干净利落",就像w通常的命令一样?
我不明白为什么这些命令会做不同的事情.
粘贴在vimrc文件中,按t正常方式激活:
nnoremap t :call search('\m\(a\|b\)', 'W')<CR>
nnoremap t :call search('\m\(a\\|b\)', 'W')<CR>
Run Code Online (Sandbox Code Playgroud)
直接输入命令行:
:call search('\m\(a\|b\)', 'W')
:call search('\m\(a\\|b\)', 'W')
Run Code Online (Sandbox Code Playgroud)
具体来说:"预期"行为\\|在nnoremap示例中需要a ,但\|在call搜索示例中需要它.
我知道bar(:help :bar)的特殊处理是Vim为我设计的那些陷阱之一,但它仍然没有意义.文档明确指出"这个命令列表会将栏视为其论点的一部分",但这些例外都不适用于此.此示例中涉及的所有命令都将条视为元连接字符.同样在这种情况下,条形码在一个字符串中,并且(我认为?)被解析为字符串的一部分优先于元连接语法.
在" (insert) VISUAL"模式可以通过输入CTRL+ O,v从插入模式开始.这进入可视模式,但(insert) VISUAL在vim中显示为" ",Esc从此模式按下将返回插入模式,而不是正常模式." (insert) VISUAL"模式也是由插入模式中的移位箭头键输入的.
两个相关问题:
这种特殊模式似乎没有太多文档.有没有简单的方法来搜索有关它的信息?(编辑:我知道CTRL+ O通常会做什么.与视觉模式的互动似乎很特别.第一段是最简单的方式来引用这种模式,因为我不知道可搜索的名称.)
你如何vmap可靠地编写映射?也就是说,是否有一种一致的方式来保持视觉模式并最终进入正常模式?或者始终以插入模式结束?
我有一个小的映射AltUp,AltDown可以将文本上下移动一行。我决定这些映射应该“折叠感知”,以便将文本向上移动一行会将其移过闭合折叠。但是当我使用这些映射时,vim 会破坏我的折叠。
映射:
映射通过调用:move函数来工作。的参数:move是绝对行号,文本应移至该行号以下。
nnoremap <A-Down> :call MoveDown_n()<CR>
nnoremap <A-Up> :call MoveUp_n()<CR>
function! MoveUp_n() range
let pos = getpos(".")
normal k
let line_pos = line(".") - 1
call setpos(".", pos)
execute "m".line_pos
endfunction
function! MoveDown_n() range
let pos = getpos(".")
normal jj
let line_pos = line(".") - 1
call setpos(".", pos)
execute "m".line_pos
endfunction
Run Code Online (Sandbox Code Playgroud)
测试文件:
vim: foldmethod=marker
fold A {{{
some
text
here
}}}
fold B {{{
some …Run Code Online (Sandbox Code Playgroud) 有 3 个密切相关的 vim 命令可让您调用外部程序:
:[range]!{filter-cmd} {arg} (前命令,:help :range!)
:[range]write !{cmd}(前命令,:help :w_c)
system({expr}, {arg})(vimscript 函数, :help system())
(我包括!并:!cmd作为 1 的一部分。)
在我看来,存在三个重要区别:
[range] 发送到 stdin in,stdout 替换 [range][range] 发送到标准输入,标准输出被忽略system(),所以 stdout 可以保存到一个变量中:let @a = system(..)真的没有办法将当前缓冲区或当前行作为标准输入发送到外部命令并且可以不受限制地访问标准输出吗?
如果您想编写,例如,需要解析行/缓冲区的复杂移动命令(解析最好不要用 vimscript 编写),这似乎非常令人惊讶。
({arg}由于以下几个原因,尝试发送内容会很疯狂:1. 字符长度限制,2. 您必须在 vimscript* 中编写一个 shell 转义函数)
这是我能找到的唯一其他相关问题。它将字符串变量作为 shell 参数发送到 (unix) 'echo',然后将其作为标准输入发送到您的程序:我可以将字符串作为标准输入从 vim 传递给系统调用吗?
*如果 vim 功能可以满足shellescape()您的要求,那很好,但是在 Windows 上,它甚至无法远程保护cmd.exe …
在Haskell中,当你已经有一个打开的文件句柄并且不想关闭它时,如何清除文件的内容?是否有一些简单的方法从System.IO API不明显?
在限制较少的情况下,清除文件内容的最简单方法是使用writeFile awesomefile.txt "".如果您已经有一个打开的文件句柄awesomefile.txt,那么writeFile将失败并出现异常(即"openFile:resource busy(file is locked)").
我想也许hSeek用于将手柄设置回起始位置可能会产生类似的效果,但事实并非如此.在寻找回到开始的句柄之后,下一个hPutStr调用将根据需要覆盖尽可能多的字节(无论如何这更具逻辑意义).
在我的程序中出现这种情况,我想经常将信息写入文件以进行日志记录.只有最新的日志数据是相关的(并且巨大的文件非常不方便),因此在每次写入之前清空文件.因为写操作非常频繁,所以我只想打开一次文件句柄.
只有相关问题:
用haskell语言清除文件内容