Greasy Fork is available in English.

ChatGPT Vim-Style Scrolling (Ctrl+U / Ctrl+D)

Scroll ChatGPT with keyboard like Vim (Ctrl+U to scroll up, Ctrl+D to scroll down)

Você precisará instalar uma extensão como Tampermonkey, Greasemonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Userscripts para instalar este script.

Você precisará instalar uma extensão como o Tampermonkey para instalar este script.

Você precisará instalar um gerenciador de scripts de usuário para instalar este script.

(Eu já tenho um gerenciador de scripts de usuário, me deixe instalá-lo!)

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

(Eu já possuo um gerenciador de estilos de usuário, me deixar fazer a instalação!)

// ==UserScript==
// @name         ChatGPT Vim-Style Scrolling (Ctrl+U / Ctrl+D)
// @namespace    https://greasyfork.org/users/your-username
// @version      1.1
// @description  Scroll ChatGPT with keyboard like Vim (Ctrl+U to scroll up, Ctrl+D to scroll down)
// @author       Maciek Dobaczewski
// @match        https://chatgpt.com/*
// @grant        none
// @license      MIT
// @run-at       document-idle
// ==/UserScript==

(function () {
  'use strict'

  function handleKeydown(e) {
    if (!e.ctrlKey) return

    // You can manually update this selector if chatGPT changes the element. 
    const container = document.querySelector('div.flex.h-full.flex-col.overflow-y-auto')
    if (!container) return

    const key = e.key.toLowerCase()
    if (key === 'd') {
      container.scrollBy({ top: 300 })
      e.preventDefault()
    } else if (key === 'u') {
      container.scrollBy({ top: -300 })
      e.preventDefault()
    }
  }

  document.addEventListener('keydown', handleKeydown, true)
})()