Class: OllamaChat::Vim

Inherits:
Object
  • Object
show all
Defined in:
lib/ollama_chat/vim.rb

Overview

A class that provides functionality for inserting text into Vim buffers via remote communication.

Examples:

vim = OllamaChat::Vim.new("MY_SERVER")
vim.insert("Hello, Vim!")

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(server_name) ⇒ OllamaChat::Vim

Initializes a new Vim server connection

Creates a new OllamaChat::Vim instance for interacting with a specific Vim server. If no server name is provided, it derives a standardized server name based on the current working directory using the default_server_name method.

Parameters:

  • server_name (String, nil)

    The name of the Vim server to connect to. If nil or empty, defaults to a server name derived from the current working directory using default_server_name



22
23
24
25
# File 'lib/ollama_chat/vim.rb', line 22

def initialize(server_name)
  server_name.full? or server_name = self.class.default_server_name
  @server_name = server_name
end

Class Method Details

.default_server_name(name = Dir.pwd) ⇒ String

The default_server_name method generates a standardized server name based on a given name or the current working directory.

This method creates a unique server identifier by combining the basename of the provided name (or current working directory) with a truncated MD5 hash digest of the full path. The resulting name is converted to uppercase for consistent formatting.

Parameters:

  • name (String) (defaults to: Dir.pwd)

    the base name to use for server identification defaults to the current working directory

Returns:

  • (String)

    a formatted server name suitable for use with Vim server connections



40
41
42
43
44
45
# File 'lib/ollama_chat/vim.rb', line 40

def self.default_server_name(name = Dir.pwd)
  prefix = File.basename(name)
  suffix = Digest::MD5.hexdigest(name)[0, 8]
  name = [ prefix, suffix ] * ?-
  name.upcase
end

Instance Method Details

#colObject

Returns the current column position of the cursor in the Vim server

This method queries the specified Vim server for the current cursor position using Vim’s remote expression feature. It executes a Vim command that returns the result of ‘col(’.‘)`, which represents the current column number (1-indexed) of the cursor position.



70
71
72
# File 'lib/ollama_chat/vim.rb', line 70

def col
  `vim --servername "#@server_name" --remote-expr "col('.')"`.chomp.to_i
end

#insert(text) ⇒ Object

Inserts text at the current cursor position in Vim

This method writes the provided text to a temporary file and uses Vim’s remote-send functionality to insert it at the current cursor position. The text is automatically indented to match the current column position.

Parameters:

  • text (String)

    The text to be inserted into the Vim buffer



54
55
56
57
58
59
60
61
62
# File 'lib/ollama_chat/vim.rb', line 54

def insert(text)
  spaces = (col - 1).clamp(0..)
  text   = text.gsub(/^/, ' ' * spaces)
  Tempfile.open do |tmp|
    tmp.write(text)
    tmp.flush
    system %{vim --servername "#@server_name" --remote-send "<ESC>:r #{tmp.path}<CR>"}
  end
end