[vim ] 把光标位置上的“字”写出去给外部程式?

楼主: cuello (cuello)   2021-07-22 19:25:52
Hi,
我在 .vimrc 里这么做
map <C-j> :.,/^[ \t]*$/ w !<外部程式><CR><CR>
就是定义 [Ctrl]-[J] 把 buffer 游标所在那一行开始往后
把整段(直到碰到空行),写出去给外部的程式,
这个程式则由 stdin 读入,接手处里这几行。
但是,我有进一步的需求,就是以上的方式是以行为单位,
问题是,可不可能只写出去游标所在的“那一个字”
“那一个字”可以是 "W/B" 或是 "w/b" 的“大字”或“小字”
我想过,例如,再编辑模式: B"ayW
可以把那个我要的“字”存到 named register a 去
但是,我不晓得要怎样才能在 .vimrc 把 "a 像上面那样
写出去给一个外部程式
请问这可以办到吗?
感谢指点迷津!
作者: as23041248 (KAIKAIKAI)   2021-07-22 22:34:00
你要的是 <cword>?
作者: ssd860505da (JAGER)   2021-07-23 01:08:00
用* register? 可是某些情况会出bug,快被烦死了我后来用这两个pluginstmux-plugins/vim-tmux-focus-eventsroxma/vim-tmux-clipboard目前没出什么问题
作者: as23041248 (KAIKAIKAI)   2021-07-23 04:14:00
exe "normal! viw" | exe "'<,'>write !{cmd}"
作者: bootleq   2021-07-23 08:40:00
map 里可以用 <C-R>=expand('<cword>') 插字进去
作者: as23041248 (KAIKAIKAI)   2021-07-23 13:12:00
楼上 要写到外部程式好像无法这样使用
作者: siuoly (放空)   2021-07-23 22:13:00
你另外写一个脚本测试也太辛苦了好奇是什么情况要用stdin?我目前只用到cmd argument的情形测试<cword> 可用 :!echo <cword> 查看结果vim内建echo用法 :echo expand("<cWORD>")外部shell命令就会自己展开,我以前也踩过这坑= ="...可能你已经知道了 提醒下 map 命令里 | 符号要改成<bar>否则vim 把 | 看成是map之后接续 新的命令我也常常弄小东西花很多时间,我常怀疑这样时间真的有赚吗弄出来是很爽没错,但可以我都尽量找现成工具来做事你辛苦哩

Links booklink

Contact Us: admin [ a t ] ucptt.com