microsoft / vscode

Visual Studio Code
https://code.visualstudio.com
MIT License
163.64k stars 29.04k forks source link

Synchronized Scrolling in Split Editor #33110

Closed jcastanza-apollidon closed 7 months ago

jcastanza-apollidon commented 7 years ago

I have a feature request related to synchronized scrolling in the Split Editor. I checked for extensions and didn't see any. Was wondering if this is the pipeline or not.

hisbvdis commented 10 months ago

Thanks, works fine.

From: dq notifications@github.com To:microsoft/vscode vscode@noreply.github.com CC:intellekta uwe.cramer@intellekta.de, Comment comment@noreply.github.com Date: 03.06.2020 00:02 Subject: Re: [microsoft/vscode] Synchronized Scrolling in Split Editor (#33110) Everybody hands up, here comes Sync Scroll ( https://marketplace.visualstudio.com/items?itemName=dqisme.sync-scroll) This extension will help you synchronize scrolling on split editor. Try it out and leave your reviews or issues or PRs. Very glad to hear that. Happy hacking and long lives the open source community. — You are receiving this because you commented. Reply to this email directly, view it on GitHub ( #33110 (comment)) , or unsubscribe ( https://github.com/notifications/unsubscribe-auth/ADLQHAC3DD372DWJ2R7TMX3RUVZGJANCNFSM4DYHXJBA) .

Unfortunatelly, this extension is not working anymore.

benibenj commented 7 months ago

I'm planning to introduce synchronized scrolling to Visual Studio Code in March and would like to make it as straightforward and practical as possible. To do that, I'm keen to understand the scenarios you envision using it for and how you'd prefer to switch it on or off.

It seems like a lot of the interest is around comparing language files, where both files would scroll together so that each line matches up across files. Do you use a standard format for your language files, or have you developed a custom format?

If there are other scenarios where the current File: Compare Active File With... feature doesn't meet your needs, please let me know.

Regarding how to access this feature, would a command like Synchronize Scroll Active File With... work for you? This would open a side-by-side editor with synchronized scrolling. It would align line number X in the left file with line number X on the right side. Would there be a need to adjust the alignment manually?

I'm open to any feedback or suggestions on how to better implement this feature.

oshliaer commented 7 months ago

@benibenj

Great!

brianblakely commented 7 months ago

@benibenj

A less opinionated command like Toggle Synchronized Editor Scrolling would be ideal, which propagates a scroll event in one editor to all active editors in the same window. This would allow me to, for example, open a single large file in two editors, and synchronize scrolling between them as I inspect a list of imported functions versus their references much later on.

the-coder-o commented 7 months ago

Hello World How Are you today?

kokoshneta commented 7 months ago

@benibenj

If there are other scenarios where the current File: Compare Active File With... feature doesn't meet your needs, please let me know.

Regarding how to access this feature, would a command like Synchronize Scroll Active File With... work for you? This would open a side-by-side editor with synchronized scrolling. It would align line number X in the left file with line number X on the right side. Would there be a need to adjust the alignment manually?

I have used split editors for language files, but more commonly I’ve used it for different versions of the same file, to identify how they differ. Sometimes, that means things like comparing a file in the repository or workspace I have open with a backup file downloaded from a third-party backup system and not located in the same repository/workspace. It also means it’s often the case that lines numbers are not parallel. Code on line 50 in one version may be on line 400 in the version I’m comparing with.

A command like ‘Synchronize Scroll Active File With…’ would be useful, but quite limited.

A much, much more powerful and useful feature would be two toggles located in/on/at/by the scrollbar between adjacent editor panes:

In combination, those would determine which of the three possible scrolling behaviours applies to the two panes:

  1. Sync disabled: panes scroll individually (matching line numbers should probably be greyed out when syncing is disabled)
  2. Sync enabled, matching disabled: panes scroll up and down in unison based on whatever position the file was in when syncing was enabled; for example, you can stay on line 1 in one pane and scroll down to line 201 in the other, then turn on syncing, and the files will remain parallel, one file 200 lines ahead of the other; wrapped lines in one pane do not affect the other pane
  3. Sync + matching enabled: panes scroll in unison based on line numbers, so that the top of the files are positioned next to each other and wrapped lines in one editor results in extra space in the other

That would be the dream scenario for me. It’s quite similar to the plugin linked to by @oshliaer, except that it looks like the plugin just has three modes to choose from as a command, rather than toggles. The benefit of toggles is that they allow you to individually set the syncing and line matching mode not for the window but for two adjacent split editor panes.

That means that if you have your editor split into four panes, you can sync-scroll all four panes, only panes 1+2, panes 1+2 and 3+4 but not 2+3 (giving you two separate, sync-scrolling ‘groups’), etc.

starball5 commented 7 months ago

Related on Stack Overflow: Synchronise vertical/horizontal scrolling in split view

More loosely related: How can I make VS Code display a file in a two editor groups, where the bottom line of the left group is always the top of the right one? for people who want to sync a split of the same file, but have one start at the line where the previous ends.

raffle-x-dev commented 7 months ago

Up!

benibenj commented 7 months ago

Tomorrows VSCode Insiders will support the Toggle Locked Scrolling Across Editors which will synchronize the scrolling across all text editors and notebooks. You can also set a keybinding for workbench.action.holdLockedScrolling which will synchronize the scrolling only when being pressed.

Try it out here: https://code.visualstudio.com/insiders/