【问题标题】:Selecting text and saving it with keymap选择文本并使用键盘映射保存
【发布时间】:2015-08-24 07:47:33
【问题描述】:

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

我制作了这个程序,以便我可以将选择的文本从 vim 发送到我想要的任何程序,例如 python 交互式程序。

我不知道如何将选择直接发送到程序,但我确实找到了如何在可视模式下保存选定的文本(How can I save a text block in visual mode to a file in Vim? - 它可以保存整行,但这对于我的目的来说是可以的。理想情况下但是,它不会只保存行)。因此,我将程序的样式参数更改为文件名。我的计划是 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>

键映射不完整,但 vim 现在甚至没有执行所有它。当我按 F5 时,它会按预期选择最上面的括号,但不会将选择保存到文件中。

SendS 命令确实有效,所以这不是问题。

【问题讨论】:

    标签: vim


    【解决方案1】:

    对于所有这些重复的a( 文本对象,您可能打算捕获最外圆括号中的文本。不幸的是,如果括号数少于文本对象,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>
    

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

    【讨论】:

    • 你能举个例子吗?我不太明白(我对 vim 很陌生)。
    猜你喜欢
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多