Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim 选择文本并使用keymap保存_Vim - Fatal编程技术网

Vim 选择文本并使用keymap保存

Vim 选择文本并使用keymap保存,vim,Vim,我制作了一个c#命令行程序,它以一个窗口句柄和一个字符串作为参数。它将带有句柄的窗口带到前台,使用SendKeys发送传递的字符串,并将以前位于前台的窗口带回到前台 我制作了这个程序,这样我就可以将从vim选择的文本发送到我想要的任何程序,比如python interactive 我不知道如何将所选内容直接发送到程序,但我确实找到了如何在视觉模式下保存所选文本(-它保存了整行内容,但这对我来说没关系。不过,理想情况下,它不会只保存行)。因此,我将程序的styring参数更改为文件名。我的计划是v

我制作了一个c#命令行程序,它以一个窗口句柄和一个字符串作为参数。它将带有句柄的窗口带到前台,使用SendKeys发送传递的字符串,并将以前位于前台的窗口带回到前台

我制作了这个程序,这样我就可以将从vim选择的文本发送到我想要的任何程序,比如python interactive

我不知道如何将所选内容直接发送到程序,但我确实找到了如何在视觉模式下保存所选文本(-它保存了整行内容,但这对我来说没关系。不过,理想情况下,它不会只保存行)。因此,我将程序的styring参数更改为文件名。我的计划是vim将所选文本保存到一个文件中,并使用文件名调用程序

这是我的vimrc的一部分

let g:send_keys_handle = 0
let g:send_keys_file = $home . "\\vim\\send.txt"
function! SendSelection()
if g:send_keys_handle
silent !cls
let x = "silent !cmdHost " . g:send_keys_handle . " " . "\"" . g:send_keys_file . "\""
echom x
execute x
endif
endfunction
command! SendS call SendSelection()
noremap <F5> <esc>va(a(a(a(a(a(a(a(a(a(a(a(a(a(a(a(:w ~\vim\send.txt<cr>
让g:send\u keys\u handle=0
让g:send_keys_file=$home。“\\vim\\send.txt”
功能!SendSelection()
如果g:发送\u键\u句柄
安静!cls
让x=“静默!cmdHost”。g:发送钥匙和把手。" " . “\”“.g:发送密钥文件。”\“”
回声x
执行x
恩迪夫
端功能
命令!发送调用SendSelection()
(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(w~\vim\send.txt
键映射尚未完成,但vim现在甚至没有执行所有的映射。当我按F5时,它会按预期选择最上面的括号,但不会将选择保存到文件中


SendS命令确实起作用,所以这不是问题。

对于所有重复的
a(
text对象),您可能打算捕获最外层括号中的文本。不幸的是,如果paren少于text对象,Vim将发出蜂鸣音并中止映射,因此剩余部分将不会执行

一种可能的解决方案是将其分为两部分,并使用
:normal!
进行选择。这将只中止
:normal
部分;其余的映射仍将执行。不过,您需要使用
gv
重新建立视觉选择

nnoremap <F5> :execute 'normal! va(a(a(a(a(a(a(a(a(a(a(a(a(a(a(a('<CR>gv:w ~\vim\send.txt<CR>
nnoremap:execute'normal!va(a)(a)(a)(a)(a)(a)(a)(a)(a)(a('gv:w~\vim\send.txt


:write
(它也会发出消息,并设置备用文件,除非您预先添加
:keepalt
)的替代方法是
y
anking选择,并使用较低级别的
writefile()
函数将所选内容存储在文件中。

您能给出一个备选方案的示例吗?我真的不太懂(我对vim很陌生)。