Vim
Vim copied to clipboard
Issue with cursor position using visual line movement (`gj` and `gk`)
Please thumbs-up 👍 this issue if it personally affects you! You can do this by clicking on the emoji-face on the top right of this post. Issues with more thumbs-up will be prioritized.
What did you do?
I've set the following as I like to work with word wrap enabled:
"vim.otherModesKeyBindingsNonRecursive": [
{
"before": ["j"],
"after": ["g", "j"]
},
{
"before": ["k"],
"after": ["g", "k"]
}
]
I noticed a discrepancy in behaviour for lines without wrapping. As you navigate between lines of varying length the cursor position doesn't keep its horizontal position.
The following GIFs just show motion using j
and k
.
I would expect both GIFs to show the same thing regardless if the gj
and gk
mappings are applied.
What did you expect to happen?
Expected behaviour (the keybinding mappings not applied):
What happened instead?
Current behaviour (the keybinding mappings applied):
Technical details:
- VSCode Version: 1.9.1
- VsCodeVim Version: 0.5.3
- OS: MacOS 10.12.3
copying comment from dupe ticket linked:
This is a tough one
I couldn't figure out a way to get the start and end column positions of the wrapped line.
I tried this:
const posLine = vimState.editor.selection.active.line;
await vscode.commands.executeCommand("cursorMove", {
to: "wrappedLineStart"
});
const startCol = vimState.editor.selection.active.character;
await vscode.commands.executeCommand("cursorMove", {
to: "wrappedLineEnd"
});
const endCol = vimState.editor.selection.active.character;
const lineLength = endCol - startCol;
vimState.cursorPosition =
new Position(posLine, Math.min(lineLength + startCol, vimState.desiredColumn + startCol));
but moving the cursor 3 times for every 1 time we want to move it makes no sense from a performance standpoint.
I think that we need to get wrappedLine info via the vscode API but I could not find it currently...
Then we could skip using cursor move and do the same sort of moves we do as j and k, however we would use the wrappedLine start and end column instead of 0 and end of line
related https://github.com/Microsoft/vscode/issues/23045
New user here having this issue. I had trouble following this issue since it was spread across a several of PRs/Issues so I might just be misunderstanding, but as far as I can tell it looks like it was supposed to have been fixed in May with https://github.com/VSCodeVim/Vim/pull/1552
I'm not intending to do anything with folding, but trying to get my j => gj
/k => gk
shortcuts working I've enabled "vim.foldfix": true
which that PR suggested.
I'm still seeing the initial behavior where cursor position isn't retained (as seen in the gifs above).
Am I missing something?
@jessejanderson "vim.foldfix": true
makes my cursor skip (as in touch a wrapped line) and then continue with the previous erroneous behavior. I was hoping that was what I was missing.
This still seems like an issue, If anyone has figured out a configuration which works I'm all 👂.
VSCode - 1.24.1 VSCodeVim - 0.13.0
I also have this issue. Would love to see a solution, or any form of workaround!
I don't know if it's related, but when moving a number of lines using j
or k
as in 15j
or 15k
, the initial column position isn't remembered either.
For me it's an issue when moving to/from a line that spans more than row.
This remains an isse even with "vim.foldfix": true
, VSCode 1.29.1, and VSCode Vim 0.16.14. Does someone have another workaround?
Still an issue for me, as well.
Still an issue.
@J-Fields what vscode version will we see your fix in?
@rightaway Please see https://github.com/VSCodeVim/Vim/pull/4127
Still met this problem 😢
I think this has worked for a while but I can't get this to work anymore. @J-Fields did your fix somehow get removed?
I was having this issue as well. I solved it by following the instructions given on #3623 for setting up keybindings in VSCode by opening keyboard shortcuts JSON file from the command palette. Just need to add following keybindings in the file:
{
"key": "up",
"command": "cursorUp",
"when": "editorTextFocus && vim.active && !inDebugRepl && !suggestWidgetMultipleSuggestions && !suggestWidgetVisible"
},
{
"key": "down",
"command": "cursorDown",
"when": "editorTextFocus && vim.active && !inDebugRepl && !suggestWidgetMultipleSuggestions && !suggestWidgetVisible"
},
{
"key": "k",
"command": "cursorUp",
"when": "editorTextFocus && vim.active && !inDebugRepl && vim.mode == 'Normal' && !suggestWidgetMultipleSuggestions && !suggestWidgetVisible"
},
{
"key": "j",
"command": "cursorDown",
"when": "editorTextFocus && vim.active && !inDebugRepl && vim.mode == 'Normal' && !suggestWidgetMultipleSuggestions && !suggestWidgetVisible"
}
This will allow moving between visual wrapped lines and also the cursor position for different lines will not reset.
Also, by following above instructions, you can remove following from your settings if you are using it as these don't work:
"vim.otherModesKeyBindingsNonRecursive": [
{
"before": ["j"],
"after": ["g", "j"]
},
{
"before": ["k"],
"after": ["g", "k"]
}
]
I think by using this solution, this issue can be closed. Hope this helps!
I was having this issue as well. I solved it by following the instructions given on #3623 for setting up keybindings in VSCode by opening keyboard shortcuts JSON file from the command palette. Just need to add following keybindings in the file:
{ "key": "up", "command": "cursorUp", "when": "editorTextFocus && vim.active && !inDebugRepl && !suggestWidgetMultipleSuggestions && !suggestWidgetVisible" }, { "key": "down", "command": "cursorDown", "when": "editorTextFocus && vim.active && !inDebugRepl && !suggestWidgetMultipleSuggestions && !suggestWidgetVisible" }, { "key": "k", "command": "cursorUp", "when": "editorTextFocus && vim.active && !inDebugRepl && vim.mode == 'Normal' && !suggestWidgetMultipleSuggestions && !suggestWidgetVisible" }, { "key": "j", "command": "cursorDown", "when": "editorTextFocus && vim.active && !inDebugRepl && vim.mode == 'Normal' && !suggestWidgetMultipleSuggestions && !suggestWidgetVisible" }
This will allow moving between visual wrapped lines and also the cursor position for different lines will not reset.
Also, by following above instructions, you can remove following from your settings if you are using it as these don't work:
"vim.otherModesKeyBindingsNonRecursive": [ { "before": ["j"], "after": ["g", "j"] }, { "before": ["k"], "after": ["g", "k"] } ]
I think by using this solution, this issue can be closed. Hope this helps!
it's buggy in visual mode and UPD:
{
"key": "k",
"command": "cursorUp",
"when": "editorTextFocus && vim.active && !inDebugRepl && vim.mode == 'Normal' && !suggestWidgetMultipleSuggestions && !suggestWidgetVisible"
},
{
"key": "j",
"command": "cursorDown",
"when": "editorTextFocus && vim.active && !inDebugRepl && vim.mode == 'Normal' && !suggestWidgetMultipleSuggestions && !suggestWidgetVisible"
},
it breaks 5j or 3k for example
shame on you... it hasn't been working for 8 years