3

I've the following function and accompanying key-bindings to send texts from vim in one tmux pane to other:

" copy yanked text to tmux pane
function! Send_to_tmux(count) abort
    let _count = (a:count == 0) ? 2 : a:count
    let text = @z
    let text = substitute(text, ';', '\\;', 'g')
    let text = substitute(text, '"', '\\"', 'g')
    let text = substitute(text, '\n', '" Enter "', 'g')
    let text = substitute(text, '!', '\\!', 'g')
    let text = substitute(text, '%', '\\%', 'g')
    let text = substitute(text, '#', '\\#', 'g')
    silent execute "!tmux send-keys -t " . _count . " \"" . text . "\""
    silent execute "!tmux send-keys -t " . _count . "Enter"
    unlet _count
    unlet text
endfunction
nnoremap <expr> <Leader>p '"zyip:call Send_to_tmux('.v:count.')<CR>'
xnoremap <expr> <Leader>p '"zy:call Send_to_tmux('.v:count.')<CR>'

I basically use this function when I use SQL. Now, SQL has commenting structure of two types: (written in the structure of :h 'commentstring')

  • /* %s */
  • -- %s

I always used the first type of comment, and didn't set up the substitute command for second type of comment. And now I see that I can't send texts into other tmux panes of structure -- texts. I have tried it in bare bash, and MySQL command line, same result. So, I guess bash is not taking string of that structure, or tmux is eating it itself.

I've removed all tmux configurations and tried to do it, same result. So, I don't think it's a problem with my tmux config.

How do I send -- to tmux panes from vim?

4

Looks more like a shell related question than a Vim related question. I would try the following (not tested, so might be wrong):

silent execute "!tmux send-keys -t " . _count . " -- \"" . text . "\""

Add a -- before the text. Most Unix commands stop option processing as soon as they see a -- and everything after it is handled as parameter.

  • It worked! Sorry, I couldn't figure out where to actually post this question, i.e. Unix or Stackoverflow. And can I just change the mapping, i.e. always send ` -- ` before sending the text, irrespective of whether the text has -- inside itself? I'm currently doing that, no problem yet occurred. If you have any comment, please let me know. – klaus Mar 29 at 15:58
  • 1
    @klaus if, as Ralf describes, the SQL cli youre using is well-behaved under unix, it should work if you just always send -- before your literal input – D. Ben Knoble Mar 29 at 16:25
  • In particular, the SQL CLI should conform to Guideline 10 of the Utility Syntax Guidelines (IEEE Std 1003.1-2001, Section 12.2). – wchargin Mar 29 at 19:35

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.