VSCodeVim / Vim

:star: Vim for Visual Studio Code
http://aka.ms/vscodevim
MIT License
13.85k stars 1.31k forks source link

Registers not saved across sessions #6627

Open DonnKey opened 3 years ago

DonnKey commented 3 years ago

Issue Type: Bug

Until 2 updates ago, the vim emulation retained the value of string buffers ( " ) across restarts of VS Code. Now the string buffers are reset when VS Code is restarted. I found it very useful to have the string buffers survive restarts, particularly since VS Code needs to be restarted when it loses the ability to do symbol lookups, which typically happens within less than a day of use.

Repro: set a string buffer. Restart VS Code (Close button, restart). The string buffer will be empty.

(Feature request: please finish the emulation. Features I miss: word separators (\< and >) in REs. Case independent search isn't really case independent: the case of the RE matters so that the RE xYz does not match xyz, but the RE xyz matches xYz.)

Extension version: 1.20.2 VS Code version: Code 1.56.2 (054a9295330880ed74ceaedda236253b4f39a335, 2021-05-12T17:13:13.157Z) OS version: Windows_NT x64 10.0.19042 Remote OS version: Linux x64 5.4.72-microsoft-standard-WSL2

System Info |Item|Value| |---|---| |CPUs|Intel(R) Core(TM) i3-8100 CPU @ 3.60GHz (4 x 3600)| |GPU Status|2d_canvas: enabled
gpu_compositing: enabled
multiple_raster_threads: enabled_on
oop_rasterization: enabled
opengl: enabled_on
rasterization: enabled
skia_renderer: enabled_on
video_decode: enabled
vulkan: disabled_off
webgl: enabled
webgl2: enabled| |Load (avg)|undefined| |Memory (System)|23.95GB (9.97GB free)| |Process Argv|--remote=wsl+Debian --crash-reporter-id 58d61033-a58f-44e4-a358-ed698fa24e97| |Screen Reader|no| |VM|0%| |Item|Value| |---|---| |Remote|WSL: Debian| |OS|Linux x64 5.4.72-microsoft-standard-WSL2| |CPUs|Intel(R) Core(TM) i3-8100 CPU @ 3.60GHz (4 x 3599)| |Memory (System)|18.72GB (14.50GB free)| |VM|0%|
A/B Experiments ``` vsliv368:30146709 vsreu685:30147344 python383:30185418 pythonvspyt602:30300191 vspor879:30202332 vspor708:30202333 vspor363:30204092 pythonvspyt639:30300192 pythontb:30283811 pythonvspyt943cf:30300583 pythonvspyt551cf:30291415 vspre833:30267464 pythonptprofiler:30281270 vshan820:30294714 pythondataviewer:30285071 vscus158cf:30286554 vscgsv2ct:30301613 bridgeflightcf:30302070 vscod805cf:30301675 ```
J-Fields commented 3 years ago

The format in which registers were stored on disk changed, so registers stored in 1.19.x will not be saved in 1.20.x, but it should still work (I just tested). Can you confirm that, on 1.20.2, registers are not saved across restarts? (You can use :reg to see what registers are set).

word separators (< and >) in REs

We currently rely on javascript regex, since re-implementing Vim's regex engine (which is pretty unusual) is a big lift. \b is JS's word separator.

Case independent search isn't really case independent: the case of the RE matters so that the RE xYz does not match xyz, but the RE xyz matches xYz

Sounds like you're looking for the vim.ignorecase setting

DonnKey commented 3 years ago

[image: image.png]

[image: image.png]

Look at register "h. [image: image.png]

After simply closing the window and typing 'code' to restart it (everything else restored back to where I expected it to be).

[image: image.png]

(This might be due to WSL being involved if you're not getting a repro, but this is pretty clear.)

WRT REs and case. Looks like vim "invented" some more features when I wasn't looking. It's "smartcase", not ignorecase. However, your default doesn't match that of vim Here's what vim says when freshly started.

[image: image.png]

[image: image.png]

This is the version I got with Debian installed a couple of months ago.

With respect to \< and >... I'm not going to argue that vim's REs are likely to be a project, but since I've been using that feature (in vi) since the early '80s, it's a big lift to retrain my fingers as well. Any chance of simply converting \< and > to \W or \b (or similar)? It won't be exact, but closer. I just checked my (2001) version of POSIX, and \< and > are explicitly mentioned (under ex), so that's also a standards conformance issue. (Yeah, I know, vi isn't vim, but vim does try to be standard.)

Donn

On Mon, May 17, 2021 at 6:34 PM Jason Fields @.***> wrote:

The format in which registers were stored on disk changed, so registers stored in 1.19.x will not be saved in 1.20.x, but it should still work (I just tested). Can you confirm that, on 1.20.2, registers are not saved across restarts? (You can use :reg to see what registers are set).

word separators (< and >) in REs

We currently rely on javascript regex, since re-implementing Vim's regex engine (which is pretty unusual) is a big lift. \b is JS's word separator.

Case independent search isn't really case independent: the case of the RE matters so that the RE xYz does not match xyz, but the RE xyz matches xYz

Sounds like you're looking for the vim.ignorecase setting

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/VSCodeVim/Vim/issues/6627#issuecomment-842755893, or unsubscribe https://github.com/notifications/unsubscribe-auth/AKS2YT3W6LRN6773BXIPODLTOG7Y3ANCNFSM4467AUAQ .

DonnKey commented 3 years ago

P.S. The other key I miss is Ctrl-^ - switch to prior file, which toggles between two files. It's really helpful when editing the header for a file. (Changing editor windows would be fine.)

Donn

On Mon, May 17, 2021 at 9:37 PM Donn Terry @.***> wrote:

[image: image.png]

[image: image.png]

Look at register "h. [image: image.png]

After simply closing the window and typing 'code' to restart it (everything else restored back to where I expected it to be).

[image: image.png]

(This might be due to WSL being involved if you're not getting a repro, but this is pretty clear.)

WRT REs and case. Looks like vim "invented" some more features when I wasn't looking. It's "smartcase", not ignorecase. However, your default doesn't match that of vim Here's what vim says when freshly started.

[image: image.png]

[image: image.png]

This is the version I got with Debian installed a couple of months ago.

With respect to \< and >... I'm not going to argue that vim's REs are likely to be a project, but since I've been using that feature (in vi) since the early '80s, it's a big lift to retrain my fingers as well. Any chance of simply converting \< and > to \W or \b (or similar)? It won't be exact, but closer. I just checked my (2001) version of POSIX, and \< and > are explicitly mentioned (under ex), so that's also a standards conformance issue. (Yeah, I know, vi isn't vim, but vim does try to be standard.)

Donn

On Mon, May 17, 2021 at 6:34 PM Jason Fields @.***> wrote:

The format in which registers were stored on disk changed, so registers stored in 1.19.x will not be saved in 1.20.x, but it should still work (I just tested). Can you confirm that, on 1.20.2, registers are not saved across restarts? (You can use :reg to see what registers are set).

word separators (< and >) in REs

We currently rely on javascript regex, since re-implementing Vim's regex engine (which is pretty unusual) is a big lift. \b is JS's word separator.

Case independent search isn't really case independent: the case of the RE matters so that the RE xYz does not match xyz, but the RE xyz matches xYz

Sounds like you're looking for the vim.ignorecase setting

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/VSCodeVim/Vim/issues/6627#issuecomment-842755893, or unsubscribe https://github.com/notifications/unsubscribe-auth/AKS2YT3W6LRN6773BXIPODLTOG7Y3ANCNFSM4467AUAQ .

DonnKey commented 3 years ago

Ping: as of today, string buffers are still not being restored. Version v1.21.5, VSC 1.59.0.