providing common command to compliment ex-mode. #52

Closed
t9md opened this Issue Dec 10, 2015 · 30 comments

Comments

Projects
None yet
10 participants
@t9md
Owner

t9md commented Dec 10, 2015

Use ex-mode. It's work well from ex-mode@0.15.0.


  • I created yet another vim-mode-plus-ex-mode before ex-mode support vim-mode-plus.
  • But I have no motivation to improve this my vim-mode-plus-ex-mode package, my thought is explained here #52.

Updated at 2017.05.25, since this is still very frequently accessed






Original issue comment

Many of former vim-mode user seem to use ex-mode.
But I'm not motivated to use different command prompt in one editor(Atom already have native command-palette feature as explained in #32).

Instead of providing independent command-mode( ex-mode ) to mimic pure Vim,
I want to gather information from ex-mode user for "what operation you are using frequently in ex-mode?".

Based on that information I can make those command via command-palette.
For example I locally using custom user command which toggle line-wrap.
I can include it as xxxxx to be able to toggle wrap from command-palette.
What other commands you guys make it available as command, put this discussion.

@bronson

This comment has been minimized.

Show comment
Hide comment
@bronson

bronson Dec 10, 2015

Contributor

All I want is :w, :W (typo), and :wq. I think... I'll keep an eye out.

I'll miss :%s/re/repl/g but I sure don't advocate porting that to Atom. (and :'<,'>s/re/repl/g that appears when you're using visual mode)

Contributor

bronson commented Dec 10, 2015

All I want is :w, :W (typo), and :wq. I think... I'll keep an eye out.

I'll miss :%s/re/repl/g but I sure don't advocate porting that to Atom. (and :'<,'>s/re/repl/g that appears when you're using visual mode)

@t9md

This comment has been minimized.

Show comment
Hide comment
@t9md

t9md Dec 10, 2015

Owner

I'm experimenting the way to use command-palette to complement those commands.
What I'm trying to do is invoke command-palette by : with inserting some prefix text like ex mode: to narrow candidate list. after that user simply w invoke core:save which command is defined like bllow

getEditor = ->
  atom.workspace.getActiveTextEditor()

dispatch = (command) ->
  el = atom.views.getView(getEditor())
  atom.commands.dispatch(el, command)

atom.commands.add 'atom-workspace',
  'ex-command:w': -> dispatch 'core:save'

Currently I'm trying to find paste prefixed text to command-palette mini editor when I invoke it via :

Owner

t9md commented Dec 10, 2015

I'm experimenting the way to use command-palette to complement those commands.
What I'm trying to do is invoke command-palette by : with inserting some prefix text like ex mode: to narrow candidate list. after that user simply w invoke core:save which command is defined like bllow

getEditor = ->
  atom.workspace.getActiveTextEditor()

dispatch = (command) ->
  el = atom.views.getView(getEditor())
  atom.commands.dispatch(el, command)

atom.commands.add 'atom-workspace',
  'ex-command:w': -> dispatch 'core:save'

Currently I'm trying to find paste prefixed text to command-palette mini editor when I invoke it via :

@t9md

This comment has been minimized.

Show comment
Hide comment
@t9md

t9md Dec 10, 2015

Owner

here is the prototype for ex-mode complement feature which user copy&paste to init.coffee
Although, I noticed wq throw some error when linter is enabled which is not actually this code's problem.
The evaluation result was good, but a bit slow(inserting text to command-palette fire narrowing process), maybe I can provide independent select-list view for this particular purpose.

dispatch = (commands...) ->
  editor = atom.workspace.getActiveTextEditor()
  editorElement = atom.views.getView(editor)
  for command in commands
    atom.commands.dispatch(editorElement, command)

getCommandPaletteView = () ->
  for {item} in atom.workspace.getModalPanels()
    return item if item.constructor.name is 'CommandPaletteView'

getCommandPaletteEditor = () ->
  getCommandPaletteView().filterEditorView.getModel()

insertToCommandPaletteEditor = (text) ->
  editor = getCommandPaletteEditor()
  editor.insertText(text)
  editor.moveToEndOfLine()

atom.commands.add 'atom-workspace',
  'ex-command:w': -> dispatch 'core:save'
  'ex-command:wq': -> dispatch 'core:save', 'core:close'

exCommandsPrefix = 'Ex Command:'
atom.commands.add 'atom-workspace',
  'user-ex-command-open': ->
    dispatch 'command-palette:toggle'
    insertToCommandPaletteEditor(exCommandsPrefix)
Owner

t9md commented Dec 10, 2015

here is the prototype for ex-mode complement feature which user copy&paste to init.coffee
Although, I noticed wq throw some error when linter is enabled which is not actually this code's problem.
The evaluation result was good, but a bit slow(inserting text to command-palette fire narrowing process), maybe I can provide independent select-list view for this particular purpose.

dispatch = (commands...) ->
  editor = atom.workspace.getActiveTextEditor()
  editorElement = atom.views.getView(editor)
  for command in commands
    atom.commands.dispatch(editorElement, command)

getCommandPaletteView = () ->
  for {item} in atom.workspace.getModalPanels()
    return item if item.constructor.name is 'CommandPaletteView'

getCommandPaletteEditor = () ->
  getCommandPaletteView().filterEditorView.getModel()

insertToCommandPaletteEditor = (text) ->
  editor = getCommandPaletteEditor()
  editor.insertText(text)
  editor.moveToEndOfLine()

atom.commands.add 'atom-workspace',
  'ex-command:w': -> dispatch 'core:save'
  'ex-command:wq': -> dispatch 'core:save', 'core:close'

exCommandsPrefix = 'Ex Command:'
atom.commands.add 'atom-workspace',
  'user-ex-command-open': ->
    dispatch 'command-palette:toggle'
    insertToCommandPaletteEditor(exCommandsPrefix)
@jordwalke

This comment has been minimized.

Show comment
Hide comment
@jordwalke

jordwalke Dec 10, 2015

I like any and all features that aim to implement faithful vim experiences, but I have to weigh in and say that everything else should be secondary to recreating perfect replication of core vim editing/cursor movement. Of course I want great ex mode support - but everything else is secondary to cursor movement and editing.

I like any and all features that aim to implement faithful vim experiences, but I have to weigh in and say that everything else should be secondary to recreating perfect replication of core vim editing/cursor movement. Of course I want great ex mode support - but everything else is secondary to cursor movement and editing.

@jordwalke

This comment has been minimized.

Show comment
Hide comment
@jordwalke

jordwalke Dec 10, 2015

The number one issue I see with other attempts to create a vim plugin is focusing on the long tail of vim features while neglecting the core editing experience which is what really makes vim vim. Differences in the core editing experience, no matter how subtle, is what makes people stop using Vim emulators.

The number one issue I see with other attempts to create a vim plugin is focusing on the long tail of vim features while neglecting the core editing experience which is what really makes vim vim. Differences in the core editing experience, no matter how subtle, is what makes people stop using Vim emulators.

@t9md

This comment has been minimized.

Show comment
Hide comment
@t9md

t9md Dec 10, 2015

Owner

@jordwalke At least for my vim-mode-plus package, I'm not trying to create Vim emulator .
I just borrowing part of Vim features.
I already not so faithfull like including lots of not core feature like surround, text-obj-function, indent etc. And i already breaks many of default keymap like gc is mapped to CamelCase operator(Althogh i need to reconsider reasonable keymap)

I strongly agree for editing feature is most important.
So I'm adding lots of operator/text-object even if its not provided as pure Vim.
But I'm not aiming to recreate all the vim editing feature.

Owner

t9md commented Dec 10, 2015

@jordwalke At least for my vim-mode-plus package, I'm not trying to create Vim emulator .
I just borrowing part of Vim features.
I already not so faithfull like including lots of not core feature like surround, text-obj-function, indent etc. And i already breaks many of default keymap like gc is mapped to CamelCase operator(Althogh i need to reconsider reasonable keymap)

I strongly agree for editing feature is most important.
So I'm adding lots of operator/text-object even if its not provided as pure Vim.
But I'm not aiming to recreate all the vim editing feature.

@bronson

This comment has been minimized.

Show comment
Hide comment
@bronson

bronson Dec 10, 2015

Contributor

@t9md looks great as long as I add this keymap of course:

'atom-text-editor.vim-mode-plus:not(.insert-mode)':
  ':': 'user-ex-command-open'

Love it in fact. This feels much better to me than ex-mode.

I also added a space after Ex Command:, looks better to me but not important.

exCommandsPrefix = 'Ex Command: '

@jordwalke duplicating all of Vim's editing features would be nice but I think not realistic, even with a big development team. That would be a never-ending grind of a project.

However, if everybody pitches in and implements what they personally want to see, I think we can get close enough. (Since t9md implemented gv, I think my next gruntle is that the normal mode cursor can go past the last line in the file... Fixing that will automatically fix the dd-on-the-last-line problem. I'll get to that if nobody else does it first)

Contributor

bronson commented Dec 10, 2015

@t9md looks great as long as I add this keymap of course:

'atom-text-editor.vim-mode-plus:not(.insert-mode)':
  ':': 'user-ex-command-open'

Love it in fact. This feels much better to me than ex-mode.

I also added a space after Ex Command:, looks better to me but not important.

exCommandsPrefix = 'Ex Command: '

@jordwalke duplicating all of Vim's editing features would be nice but I think not realistic, even with a big development team. That would be a never-ending grind of a project.

However, if everybody pitches in and implements what they personally want to see, I think we can get close enough. (Since t9md implemented gv, I think my next gruntle is that the normal mode cursor can go past the last line in the file... Fixing that will automatically fix the dd-on-the-last-line problem. I'll get to that if nobody else does it first)

@bronson

This comment has been minimized.

Show comment
Hide comment
@bronson

bronson Dec 10, 2015

Contributor

and I updated all my other keybindings to vim-mode-plus... No going back now!

Contributor

bronson commented Dec 10, 2015

and I updated all my other keybindings to vim-mode-plus... No going back now!

@bronson

This comment has been minimized.

Show comment
Hide comment
@bronson

bronson Dec 10, 2015

Contributor

Another one I use a lot: :vs. So here's my change:

  'ex-command:s': -> dispatch 'pane:split-down'
  'ex-command:v': -> dispatch 'pane:split-right'    # (not in vim)
  'ex-command:vs': -> dispatch 'pane:split-right'
Contributor

bronson commented Dec 10, 2015

Another one I use a lot: :vs. So here's my change:

  'ex-command:s': -> dispatch 'pane:split-down'
  'ex-command:v': -> dispatch 'pane:split-right'    # (not in vim)
  'ex-command:vs': -> dispatch 'pane:split-right'
@bronson

This comment has been minimized.

Show comment
Hide comment
@bronson

bronson Dec 10, 2015

Contributor

Hm... Turns out I type :vspl a lot. I had no idea.

How hard would it be to do a unique trigger like Vim? That way :vs, :vsp, :vspl, :vsplit etc would all work without having to define each variation. (I'm guessing it would be pretty hard so not worth it. That's fine)

@jordwalke just curious, what do you think is the biggest hole in vim-mode-plus's basic editing?

Contributor

bronson commented Dec 10, 2015

Hm... Turns out I type :vspl a lot. I had no idea.

How hard would it be to do a unique trigger like Vim? That way :vs, :vsp, :vspl, :vsplit etc would all work without having to define each variation. (I'm guessing it would be pretty hard so not worth it. That's fine)

@jordwalke just curious, what do you think is the biggest hole in vim-mode-plus's basic editing?

@bronson

This comment has been minimized.

Show comment
Hide comment
@bronson

bronson Dec 10, 2015

Contributor

ahahahaaa, why didn't I try it before commenting? The command palette does it for you. It even completes :wq into Ex Command: Write Quit

So here are my new completions. All common abbreviations work. And they look right at home in the command palette.

atom.commands.add 'atom-workspace',
  'ex-command:write': -> dispatch 'core:save'
  'ex-command:write-quit': -> dispatch 'core:save', 'core:close'
  'ex-command:split': -> dispatch 'pane:split-down'
  'ex-command:vertical-split': -> dispatch 'pane:split-right'

screen shot 2015-12-10 at 2 04 56 pm

One day the command palette's case-insensitivity might be an issue... Hope not, we'll see.

Contributor

bronson commented Dec 10, 2015

ahahahaaa, why didn't I try it before commenting? The command palette does it for you. It even completes :wq into Ex Command: Write Quit

So here are my new completions. All common abbreviations work. And they look right at home in the command palette.

atom.commands.add 'atom-workspace',
  'ex-command:write': -> dispatch 'core:save'
  'ex-command:write-quit': -> dispatch 'core:save', 'core:close'
  'ex-command:split': -> dispatch 'pane:split-down'
  'ex-command:vertical-split': -> dispatch 'pane:split-right'

screen shot 2015-12-10 at 2 04 56 pm

One day the command palette's case-insensitivity might be an issue... Hope not, we'll see.

@t9md

This comment has been minimized.

Show comment
Hide comment
@t9md

t9md Dec 11, 2015

Owner

Changed my mind, I started to experiment to bundle ex-mode like fuzzy select-list palette to vim-mode-plus.
Through this ex-palette, we can w, wq, 15 to move row 15, 50% to move to 50% row of buffer.

pros: we can frees up valuable keymapping and brain resource to remember keymap .
cons: need to maintain separate command-palette independently.

Owner

t9md commented Dec 11, 2015

Changed my mind, I started to experiment to bundle ex-mode like fuzzy select-list palette to vim-mode-plus.
Through this ex-palette, we can w, wq, 15 to move row 15, 50% to move to 50% row of buffer.

pros: we can frees up valuable keymapping and brain resource to remember keymap .
cons: need to maintain separate command-palette independently.

t9md added a commit that referenced this issue Dec 11, 2015

t9md added a commit that referenced this issue Dec 12, 2015

@t9md

This comment has been minimized.

Show comment
Hide comment
@t9md

t9md Dec 12, 2015

Owner

I removed ex-mode part from vim-mode-plus master.
Since I'm still not sure the requirement of ex-mode(since I don't want to introduce unnecessary complexity into main code).

I cleaned up and separate it as independent package.
I'm not in mood to publish this for now.

https://github.com/t9md/atom-vim-mode-plus-ex-mode

Owner

t9md commented Dec 12, 2015

I removed ex-mode part from vim-mode-plus master.
Since I'm still not sure the requirement of ex-mode(since I don't want to introduce unnecessary complexity into main code).

I cleaned up and separate it as independent package.
I'm not in mood to publish this for now.

https://github.com/t9md/atom-vim-mode-plus-ex-mode

@bronson

This comment has been minimized.

Show comment
Hide comment
@bronson

bronson Dec 19, 2015

Contributor

Agree 100% with keeping ex mode out of vim.

I'm still using your snippet and liking it a lot. Now that the fuzzy completion works, it fills all my needs. I don't like ex mode much, maybe it shows. :)

Contributor

bronson commented Dec 19, 2015

Agree 100% with keeping ex mode out of vim.

I'm still using your snippet and liking it a lot. Now that the fuzzy completion works, it fills all my needs. I don't like ex mode much, maybe it shows. :)

@oknixus

This comment has been minimized.

Show comment
Hide comment
@oknixus

oknixus Dec 31, 2015

Please publish it,thanks very much😊

oknixus commented Dec 31, 2015

Please publish it,thanks very much😊

@t9md

This comment has been minimized.

Show comment
Hide comment
@t9md

t9md Dec 31, 2015

Owner

@NixusCN You can manual install by following Readme.md of vim-mode-plus-ex-mode.

I won't publish until I find reasonable reason to support ex-mode.

Owner

t9md commented Dec 31, 2015

@NixusCN You can manual install by following Readme.md of vim-mode-plus-ex-mode.

I won't publish until I find reasonable reason to support ex-mode.

@oknixus

This comment has been minimized.

Show comment
Hide comment
@oknixus

oknixus Dec 31, 2015

👍OK,thanks. You are great!

oknixus commented Dec 31, 2015

👍OK,thanks. You are great!

@oknixus

This comment has been minimized.

Show comment
Hide comment
@oknixus

oknixus Dec 31, 2015

@t9md Please, how to use ? enter : ? But it does not seem to work.
I have restarted the Atom.

Happy New Year !

oknixus commented Dec 31, 2015

@t9md Please, how to use ? enter : ? But it does not seem to work.
I have restarted the Atom.

Happy New Year !

@t9md

This comment has been minimized.

Show comment
Hide comment
@t9md

t9md Jan 1, 2016

Owner

@NixusCN

I put keymap section in Readme.md of vim-mode-plus-ex-mode.
But why I won't publish this is I don't want to spend my time for the feature I don't thinks its necessary.

So use command-palette, most case command-palette is sufficient alternative to ex-mode.
If not, put note, background here.
For vim-mode-plus-ex-mode specific problem, put issue to that repository. Not to here.

Happy New Year!

Owner

t9md commented Jan 1, 2016

@NixusCN

I put keymap section in Readme.md of vim-mode-plus-ex-mode.
But why I won't publish this is I don't want to spend my time for the feature I don't thinks its necessary.

So use command-palette, most case command-palette is sufficient alternative to ex-mode.
If not, put note, background here.
For vim-mode-plus-ex-mode specific problem, put issue to that repository. Not to here.

Happy New Year!

@t9md t9md closed this Jan 11, 2016

@luisdavim

This comment has been minimized.

Show comment
Hide comment
@luisdavim

luisdavim Jul 11, 2016

I created a keymap to open th ecommand palette with ':' and I use https://atom.io/packages/alias-command to create my alias like :w :q etc...

I created a keymap to open th ecommand palette with ':' and I use https://atom.io/packages/alias-command to create my alias like :w :q etc...

@mussel

This comment has been minimized.

Show comment
Hide comment
@mussel

mussel Aug 9, 2016

@t9md I've been using your configs for a week now and they work great. However, I found a slight "bug". If you type ':w' and press enter really fast, the command palette will be toggled but there wont be enough time for the function insertToCommandPaletteEditor(exCommandsPrefix) to be executed. As a result, when trying to save a file, Atom kept executing the default first option of the command palette, which is opening the View Release Notes.

So, to solve this minor issue, what I did was reverse the order of the commands in the config, so that the content of the palette is changed before it is toggled:

atom.commands.add 'atom-workspace',
  'user-ex-command-open': ->
    insertToCommandPaletteEditor(exCommandsPrefix)
    dispatch 'command-palette:toggle'    

I just wanted to post this solution here in case anyone else was having the same issue.

mussel commented Aug 9, 2016

@t9md I've been using your configs for a week now and they work great. However, I found a slight "bug". If you type ':w' and press enter really fast, the command palette will be toggled but there wont be enough time for the function insertToCommandPaletteEditor(exCommandsPrefix) to be executed. As a result, when trying to save a file, Atom kept executing the default first option of the command palette, which is opening the View Release Notes.

So, to solve this minor issue, what I did was reverse the order of the commands in the config, so that the content of the palette is changed before it is toggled:

atom.commands.add 'atom-workspace',
  'user-ex-command-open': ->
    insertToCommandPaletteEditor(exCommandsPrefix)
    dispatch 'command-palette:toggle'    

I just wanted to post this solution here in case anyone else was having the same issue.

@t9md

This comment has been minimized.

Show comment
Hide comment
@t9md

t9md Aug 9, 2016

Owner

This discussion was had before I decided to release vim-mode-plus-ex-mode, and this package have fix you described above.

Owner

t9md commented Aug 9, 2016

This discussion was had before I decided to release vim-mode-plus-ex-mode, and this package have fix you described above.

@msaine

This comment has been minimized.

Show comment
Hide comment
@msaine

msaine Oct 4, 2016

First of all an apology: I am new to atom and platformIO so it may just be my ignorance of the environment that creates the following questions. In the VIM mode is there a way to jump to a specific line number? ( :23 moves cursor to line 23). Also is there an equivalent to beautify? The auto indent doesn't seem to handle braces correctly when inserting a linefeed. I come from a C standards environment that doesn't allow "{" on the same line as a control word (if, do while etc). Each "{" must be on the next line and if I go through and "fix" braces to this standard they don't end up where expected.
ie.
if (something){do something (else);}

has to be

if (something)
{
dosomething (else);
}

It really makes visually checking indentation/scope of "{" much easier for the "next" person to edit a file. I know about "%" and it is not the same as scanning a page for correct indentation.

msaine commented Oct 4, 2016

First of all an apology: I am new to atom and platformIO so it may just be my ignorance of the environment that creates the following questions. In the VIM mode is there a way to jump to a specific line number? ( :23 moves cursor to line 23). Also is there an equivalent to beautify? The auto indent doesn't seem to handle braces correctly when inserting a linefeed. I come from a C standards environment that doesn't allow "{" on the same line as a control word (if, do while etc). Each "{" must be on the next line and if I go through and "fix" braces to this standard they don't end up where expected.
ie.
if (something){do something (else);}

has to be

if (something)
{
dosomething (else);
}

It really makes visually checking indentation/scope of "{" much easier for the "next" person to edit a file. I know about "%" and it is not the same as scanning a page for correct indentation.

@intijk

This comment has been minimized.

Show comment
Hide comment
@intijk

intijk Feb 28, 2017

I still don't see the ex-mode works, the author give up atom and no longer use/develop it anymore.

ex-mode is dead.

Hi t9md, I think all the changes you've made to vim-mode-plus are great, but the personal reference should not set limitations for customization. When old vim user want to keep their habit, they don't have option now.

intijk commented Feb 28, 2017

I still don't see the ex-mode works, the author give up atom and no longer use/develop it anymore.

ex-mode is dead.

Hi t9md, I think all the changes you've made to vim-mode-plus are great, but the personal reference should not set limitations for customization. When old vim user want to keep their habit, they don't have option now.

@luisdavim

This comment has been minimized.

Show comment
Hide comment
@luisdavim

luisdavim Feb 28, 2017

@intijk I understand your position but I also understand @t9md point. For me, the ideal solution is one that allows us to have vim's commands in atom's command pallet and you can map : to trigger it if you like. There are some options out there like https://github.com/takkjoga/atom-vim-colon-command-on-command-pallete, https://github.com/hurrymaplelad/atom-alias-command and https://github.com/luisdavim/atom-alias-command but they are limited to commands that don't take arguments and I don't know if that's a limitation on atom's command pallet side.

@intijk I understand your position but I also understand @t9md point. For me, the ideal solution is one that allows us to have vim's commands in atom's command pallet and you can map : to trigger it if you like. There are some options out there like https://github.com/takkjoga/atom-vim-colon-command-on-command-pallete, https://github.com/hurrymaplelad/atom-alias-command and https://github.com/luisdavim/atom-alias-command but they are limited to commands that don't take arguments and I don't know if that's a limitation on atom's command pallet side.

@ferrao

This comment has been minimized.

Show comment
Hide comment
@ferrao

ferrao Mar 28, 2017

Find & Replace using vim ex-mode is hardcoded into my DNA.. losing this in Atom makes me rethink using it at all.

Please, Please, Please... support things like :1,$s/text/replacement/g

ferrao commented Mar 28, 2017

Find & Replace using vim ex-mode is hardcoded into my DNA.. losing this in Atom makes me rethink using it at all.

Please, Please, Please... support things like :1,$s/text/replacement/g

@bronson

This comment has been minimized.

Show comment
Hide comment
@bronson

bronson Mar 28, 2017

Contributor

Many people want it, but it appears nobody wants it bad enough to actually step up and to it. Alas.

Contributor

bronson commented Mar 28, 2017

Many people want it, but it appears nobody wants it bad enough to actually step up and to it. Alas.

@bronson

This comment has been minimized.

Show comment
Hide comment
@bronson

bronson Mar 28, 2017

Contributor

(by "it" I mean :s search. Simple to moderate ex comands work pretty well with vim-mode-plus-ex-mode)

Contributor

bronson commented Mar 28, 2017

(by "it" I mean :s search. Simple to moderate ex comands work pretty well with vim-mode-plus-ex-mode)

@fritzherald

This comment has been minimized.

Show comment
Hide comment
@fritzherald

fritzherald May 25, 2017

Contributor

The latest version of the ex-mode package appears to be working without any issues with vim-mode-plus (@ferrao :1,$s/text/replacement/g included!)

I created PR #789 to update the readme with a reference to the ex-mode package.

Contributor

fritzherald commented May 25, 2017

The latest version of the ex-mode package appears to be working without any issues with vim-mode-plus (@ferrao :1,$s/text/replacement/g included!)

I created PR #789 to update the readme with a reference to the ex-mode package.

@ferrao

This comment has been minimized.

Show comment
Hide comment
@ferrao

ferrao May 25, 2017

My day just got better @fritzherald :)

ferrao commented May 25, 2017

My day just got better @fritzherald :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment