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

Ignore vim-surround #46

Open
rockyzhang24 opened this issue Feb 5, 2022 · 11 comments
Open

Ignore vim-surround #46

rockyzhang24 opened this issue Feb 5, 2022 · 11 comments

Comments

@rockyzhang24
Copy link

Was looking for such a plugin for managing clipboard and finally I found this. Thank you.

I am using vim-surround as well and I noticed that the deleted surroundings such as " ", ' ', etc are caught by this plugin. I believe this is meaningless. Take "Hello World" as an example, I place the cursor anywhere inside the double quotes and then I press cs"' to change the surroundings from double quotes to single quotes. Then the double quotes " " are recorded by this plugin. Is it possible to ignore such a behavior of other plugins?

Screen Shot 2022-02-05 at 11 28 33

Thank you very much.

@AckslD
Copy link
Owner

AckslD commented Feb 5, 2022

Hi @yanzhang0219, happy you like it :)

Maybe a filter could be used for this. Although I'm not sure exactly how vim-surround performs the change. Could you add a filter just to print what the yank action is:

require('neoclip').setup{
  ...
  filter = function(data)
    print(vim.inspect(data))
    return true
  end,
  ...
}

Then perform the action and see what :messages says.

Btw, I'm using vim-sandwich and if I do sr'" I don't get any additional entries in the neoclip history.

@rockyzhang24
Copy link
Author

rockyzhang24 commented Feb 5, 2022

Okay. Thanks. I also noticed that not only the surroundings are stored, but the surrounded text is stored as well. That means, once I execute cs"', two entries are stored. One is Hello World and the other is " ". I think the filter may be not applicable because text surrounded by some characters is very general. If I rule out all the text with surroundings to avoid it being stored by vim-surround, in the future when I want to copy it by my own, it won't be stored.

Here is what :messages output after adding the filter above.

image

I didn't dig into the source code of vim-surround. But I guess it must yank the text and the surroundings to implement its functions, and this triggers neoclip to record them.

@AckslD
Copy link
Owner

AckslD commented Feb 5, 2022

@yanzhang0219 Another option would be to execute the vim-surround commands using :noautocmd such that TextYankPost is not triggered and the entry it not stored.

Alternatively you could wrap the call with a require('neoclip').stop()/require('neoclip').start().

Unfortunately, the data passed to the filter is all the information we can know in the autocmd of TextYankPost, so there is no real way to filter this from neoclips side.

@AckslD
Copy link
Owner

AckslD commented Feb 5, 2022

Btw, as for you question on the vim-surround issue above, from the :messages you have above you can see that the operator is actually d. So vim-surround is deleting things during it's command and not actually yanking (y). Which to be fair I wouldn't say is nothing wrong in itself :)

Anyway, I've been pretty happy with vim-sandwich for a while and can recommend it.

@rockyzhang24
Copy link
Author

Thank you so much for the information.

you can see that the operator is actually d

Exactly. Sorry I overlooked that. Just now I went through the source code of vim-surround and I saw that it uses d operator with the default register. I've already changed the vim-surround issue I opened to see whether the blackhole register could be used instead of the default register.

Anyway, I've been pretty happy with vim-sandwich for a while and can recommend it.

I will definitely give it a shot. Thank you.

@rockyzhang24
Copy link
Author

Hello @AckslD, after using this plugin for a while, I have some comments and I will write it down here instead of opening a new issue because they are related. Thank you.

I found many plugins internally use d, c or y together with the default register to implement its features. This causes many useless texts are listed. For example, LuaSnip removes the placeholder by c, so if a snippet has a placeholder and after we replace it, the placeholder text is stored and will be listed by neoclip.

Using :noautocmd or wrapping stop()/start() is not applicable for some situation like LuaSnip example above. So the history list will contain many many unnecessary and useless texts in it.

@AckslD
Copy link
Owner

AckslD commented Feb 6, 2022

@yanzhang0219 Hmm I see, I will try to think of there is a good solution here. Let me know if you have some ideas.

@AckslD
Copy link
Owner

AckslD commented Feb 6, 2022

Btw, have you found any plugins using y or would restricting to only such yanks work for you? Ie using #47.

@AckslD
Copy link
Owner

AckslD commented Feb 6, 2022

Actually, I just realised that another plugin of mine for example uses y :)

https://github.com/AckslD/nvim-revJ.lua

@rockyzhang24
Copy link
Author

No idea so far. 😮‍💨 If only they use the blackhole register instead of the default one.

Is it possible to distinguish whether the operators are directly from the keystroke (by an event)? Actually we only care about the contents yanked directly by our own keystroke. Plugins internally use these operators by exec or something like that, and they are not from the actual keystrokes.

@AckslD
Copy link
Owner

AckslD commented Feb 10, 2022

@yanzhang0219, I'm not sure if that's possible unfortunately :/

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

2 participants