Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Breaks other plugins that map <CR> in insert mode #33

Open
sodapopcan opened this issue Aug 14, 2019 · 15 comments
Open

Breaks other plugins that map <CR> in insert mode #33

sodapopcan opened this issue Aug 14, 2019 · 15 comments

Comments

@sodapopcan
Copy link

...specifically, endwise.vim, a vital plugin for languages like ruby and viml that use end (and its variants) to close code blocks.

A quickfix is to change:

imap <buffer> <CR> <Plug>(PearTreeExpand)

to

exec "imap <buffer> <CR> ".maparg("<CR>", "i")."<Plug>(PearTreeExpand)"

...though this adds an extra blank line, for example, typing def foo<CR>hi! produces:

def foo

  hi!
end

...so this isn't a full solution.

This plugin, along with its great config, is the only one of its type that actually does what I want so I'm pretty invested in resolving this! I'd be happy to take it on myself I wanted to file an issue first to get your thoughts and see if you'd even be amenable to a PR.

@jonsmithers
Copy link

jonsmithers commented Sep 22, 2019

It looks like the extra newline is coming from endwise's <cr> mapping.

maparg("<CR>", "i") == '<CR><Plug>DiscretionaryEnd'

You could just omit this by changing maparg("<CR>", "i") to substitute(maparg('<CR>', 'i'), '<CR>', '', '')

[update] .......except that won't work because vim-endwise wants to be invoked after <CR>. One alternative bad idea is to explicitly invoke EndwiseDiscretionary() inside of <Plug>(PearTreeExpand), after <CR>.

So instead of

  return "\<CR>"

we could do

  if exists('*EndwiseDiscretionary')
    return "\<CR>\<C-R>=EndwiseDiscretionary()\<CR>"
  else
    return "\<CR>"
  endif

@tmsvg
Copy link
Owner

tmsvg commented Oct 20, 2019

Hello! It appears that putting imap <CR> <Plug>(PearTreeExpand)<Plug>DiscretionaryEnd in my vimrc fixes this. I don't normally use Endwise, so let me know if this misses something.

I don't really like the idea of having plugin-specific compatibility code in Pear Tree, so if putting the above in your vimrc does work, I would consider that the official solution.

@wookayin
Copy link

wookayin commented Nov 7, 2019

This plugin (or precisely the imap ) also breaks vim-clap. Is there any general solution that is agnostic of other plugins but preserves the mapping chian?

@JoosepAlviste
Copy link

Since Pear Tree isn't really useful in vim-clap's popup I disabled Pear Tree in that filetype:

let g:pear_tree_ft_disabled = ['clap_input']

But that kind of an approach only works for some use cases though.

@jounathaen
Copy link

Well, just to add something to the list of stuff that breaks with the <CR> mapping: I use it to select the completion in the ncm2 window or jump between neosnippets fields.

@jounathaen
Copy link

I think I have solve my mapping issue for neosnippet and ncm2 with the following mappings:

let g:pear_tree_map_special_keys = 0
imap <BS> <Plug>(PearTreeBackspace)
imap <Esc> <Plug>(PearTreeFinishExpansion)
imap <expr><CR> neosnippet#expandable_or_jumpable() ?
      \ "\<Plug>(neosnippet_expand_or_jump)" : "\<Plug>(PearTreeExpand)"

@adworacz
Copy link

For anyone using this is coc.nvim, here's how I got the autocomplete window to work properly with PearTreeExpand (much thanks to jounathaen above):

    " Disable automapping so we can fix Coc mapping.
    let g:pear_tree_map_special_keys = 0

    " Default mappings:
    imap <BS> <Plug>(PearTreeBackspace)
    imap <Esc> <Plug>(PearTreeFinishExpansion)

    " Get PearTreeExpand working with coc.nvim
    imap <expr> <CR> pumvisible() ? coc#_select_confirm() : "\<Plug>(PearTreeExpand)"

Note: you have to use imap - inoremap didn't work for me likely because of how the <Plug> command works.

@jakewvincent
Copy link

Hello! It appears that putting imap <CR> <Plug>(PearTreeExpand)<Plug>DiscretionaryEnd in my vimrc fixes this. I don't normally use Endwise, so let me know if this misses something.

I don't really like the idea of having plugin-specific compatibility code in Pear Tree, so if putting the above in your vimrc does work, I would consider that the official solution.

This worked for me. In markdown documents using vimwiki, hitting in a list is expected to continue the list, but pear-tree was interfering with that functionality before using this fix.

@mellery451
Copy link

mellery451 commented Aug 11, 2021

the <cr> map also conflicts with telescope. I'm sure there is a way to disable pear-tree when telescope activates, but I haven't found it yet.

@Leo310
Copy link

Leo310 commented May 21, 2022

@mellery451 did you fix it? I am facing the same problem now

@mellery451
Copy link

@Leo310 my fix was to remove this plugin - I need Telescope more than I need this so it was not a big loss of productivity.

@Leo310
Copy link

Leo310 commented May 21, 2022

Ah ok I see. I switched to auto-pair plugin

@skarrok
Copy link

skarrok commented Sep 27, 2022

You can disable pear-tree in telescope prompt with

let g:pear_tree_ft_disabled = ['TelescopePrompt']

@bsaxon20
Copy link

for lua nvim I used the following: vim.g.pear_tree_ft_disabled = 'TelescopePrompt'

@EmreDogann
Copy link

EmreDogann commented Jun 8, 2023

For anyone using this is coc.nvim, here's how I got the autocomplete window to work properly with PearTreeExpand (much thanks to jounathaen above):

    " Disable automapping so we can fix Coc mapping.
    let g:pear_tree_map_special_keys = 0

    " Default mappings:
    imap <BS> <Plug>(PearTreeBackspace)
    imap <Esc> <Plug>(PearTreeFinishExpansion)

    " Get PearTreeExpand working with coc.nvim
    imap <expr> <CR> pumvisible() ? coc#_select_confirm() : "\<Plug>(PearTreeExpand)"

Note: you have to use imap - inoremap didn't work for me likely because of how the command works.

This code wasn't working for me (would just paste <Plug>(PearTreeExpand) as text) but I managed to hack together a function that kinda does what I want:

function! CustomCR() abort
	" Make <CR> to accept selected completion item or notify coc.nvim to format.
	if coc#pum#visible()
		return coc#_select_confirm()
	else
		" Undo each individual enter action as opposed to undo in blocks.
		" call feedkeys("\<C-g>u")
		call coc#on_enter()
		return "\<Plug>(PearTreeExpand)"
endfunction

" Get PearTreeExpand working with coc.nvim
imap <silent><expr> <CR> CustomCR()

I haven't fully tested it but from the 5 minutes of playing around with it, it seems to work.

gko added a commit to gko/vimio that referenced this issue Sep 17, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests