SidOfc / mkdx

A vim plugin that adds some nice extra's for working with markdown documents
https://www.vim.org/scripts/script.php?script_id=5620
MIT License
482 stars 13 forks source link

using o and enter on code blocks deletes the line #143

Closed m-fonseca closed 3 years ago

m-fonseca commented 3 years ago

OS type:

Vim:

Vim version: NVIM v0.4.4

Using mkdx 602a784

Reproduce steps:

Use the following markdown file.

Test1
=====

This is a test

        indented code block
  1. Imediatly after indented code block press enter.

Expected:

The cursor goes to next line.

Actual:

The line is deleted :exploding_head: . Note: the same happens when pressing 'o' while the cursor is on indented code block line

I thought I had a conflict with all my mods, so I created a clean setup with no mods except this one, and a init.vim like below, and it still exhibits the problem.


" mkdx - markdown formating plugin {{{
let g:mkdx#settings     = { 'highlight': { 'enable': 1 },
                        \ 'enter': { 'shift': 1 },
                        \ 'links': { 'external': { 'enable': 0 } },
                        \ 'table': { 'align': { 'left':[], 'center':[],'right':[], 'default': 'left' } },
                        \ 'toc': { 'text': 'Table of Contents', 'update_on_write': 1 },
                        \ 'fold': { 'enable': 1 },
                        \ 'map': { 'prefix': 'm' } }
let g:polyglot_disabled = ['markdown'] " for vim-polyglot users, it loads Plasticboy's markdown

:let g:mkdx#settings.gf_on_steroids = 1

" }}}

Thanks!

SidOfc commented 3 years ago

Hello @m-fonseca, yeah this was another thing I overlooked, I naively thought most folks would just use fenced code blocks :sweat_smile:

Anyways, this would normally be quite tricky to properly detect since list items can also be at an indent level of 4 so I can't assume every line with indent of 4 will be an indented code block. To "guess" correctly I'm using a bit of help from syntax highlighting, essentially if the cursor line is a markdownCodeBlock (indented code block) or markdownCode (fenced code block) normal behavior will be applied.

With normal I mean that pressing either enter / o will indent the next line as well, and if you press enter on that newly added empty line again it will de-indent.

Let me know if this is working properly for you, feel free to reopen if the issue persists.

m-fonseca commented 3 years ago

Seems to be working now. Thanks!

m-fonseca commented 3 years ago

I found one other case where the o deletes the line, but I have to admit, it might not be valid markdown. Still it would preferable if it didn't delete lines :wink: .

Test
====

This is a *test

    testing

do o on testing

SidOfc commented 3 years ago

@m-fonseca this one is also fixed now. It is not exactly invalid markdown but the *test is seen as an unclosed markdownItalic tag.

m-fonseca commented 3 years ago

Verified. Thanks for the fix!

lclrc commented 2 years ago

Compatible with Pandoc? pandoc and it's syntax defined some highlight name, such as pandocDelimitedCodeBlock.

Temporarily, I changed: https://github.com/SidOfc/mkdx/blob/a6fc41f7630e675ca5f0aeb829ad1b88c73a7c63/autoload/mkdx.vim#L1917 To:

if (index(cursor_line_hl, 'pandocDelimitedCodeBlock') > -1 || index(cursor_line_hl, 'markdownCodeBlock' ) > -1 || index(cursor_line_hl, 'markdownCode') > -1)

Otherwise, using o or <enter> on indent code blocks will delete the line

SidOfc commented 2 years ago

Hello @lclrc,

Cheers for the example code which shows clearly what you want to achieve, and if I understand correctly, it also fixes your issue as well right?

If this is the case, would you mind opening a PR with this fix?

Additionally, I appreciate the effort of you looking for similar issues before just opening a new one 👍. That said, this would have been a solid issue by itself since this is specifically about vim-pandoc and it causes the problem described in this issue :)

Thank you for your time and contribution to mkdx.vim! 🚀

lclrc commented 2 years ago

@SidOfc Sorry for my late reply! Github did not notify me. :(

and if I understand correctly, it also fixes your issue as well right?

yes, but I think the example code is "hard code", maybe I need to test its stability and functionality. And then I will open a PR. :)