{"record":{"id":"8610fd1effe5d96c","repo":"helix-editor/helix","slug":"register-name-does-not-support-writing","errorCode":null,"errorMessage":"Register {name} does not support writing","messagePattern":"Register (.+?) does not support writing","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"helix-view/src/register.rs","lineNumber":83,"sourceCode":"                &self.clipboard_provider.load(),\n                self.inner.get(&name),\n                match name {\n                    '+' => ClipboardType::Clipboard,\n                    '*' => ClipboardType::Selection,\n                    _ => unreachable!(),\n                },\n            )),\n            _ => self\n                .inner\n                .get(&name)\n                .map(|values| RegisterValues::new(values.iter().map(Cow::from).rev())),\n        }\n    }\n\n    pub fn write(&mut self, name: char, mut values: Vec<String>) -> Result<()> {\n        match name {\n            '_' => Ok(()),\n            '#' | '.' | '%' => Err(anyhow::anyhow!(\"Register {name} does not support writing\")),\n            '*' | '+' => {\n                self.clipboard_provider.load().set_contents(\n                    &values.join(NATIVE_LINE_ENDING.as_str()),\n                    match name {\n                        '+' => ClipboardType::Clipboard,\n                        '*' => ClipboardType::Selection,\n                        _ => unreachable!(),\n                    },\n                )?;\n                values.reverse();\n                self.inner.insert(name, values);\n                Ok(())\n            }\n            _ => {\n                values.reverse();\n                self.inner.insert(name, values);\n                Ok(())\n            }","sourceCodeStart":65,"sourceCodeEnd":101,"githubUrl":"https://github.com/helix-editor/helix/blob/079a789e8cb08ead67f19e1971a1b7438b37354b/helix-view/src/register.rs#L65-L101","documentation":"Registers::write refuses writes to the three read-only registers: '#' (selection indices), '.' (last inserted text), and '%' (document name). These are computed values, so assigning to them is an error rather than a silent no-op. Writing to '_' (black hole) is accepted and discards the value.","triggerScenarios":"Running :set-register % value, :set-register . value or :set-register # value; calling registers.write('%', vals) from code; yank/append commands aimed at one of these three names.","commonSituations":"Users experimenting with :set-register and picking a special register; scripts that programmatically stage text into '%' expecting it to change the filename (it cannot — use rename instead); Vim habits where some of these registers behave differently.","solutions":["Target a writable register: named a-z/0-9, the default '\"', or clipboard '*'/'+'.","To change what '%' reports, rename the document rather than writing the register.","Use '_' if you intentionally want the write to be discarded (e.g. uniform code paths)."],"exampleFix":"# before\n :set-register % myfile.txt\n\n# after\n :write myfile.txt  # rename/save changes the buffer name instead","handlingStrategy":"validation","validationCode":"const READ_ONLY_REGISTERS: [char; 3] = ['#', '.', '%'];\n\nfn can_write_register(name: char) -> bool {\n    !READ_ONLY_REGISTERS.contains(&name)\n}","typeGuard":"fn writable_register(name: char) -> Option<char> {\n    (!matches!(name, '#' | '.' | '%')).then_some(name)\n}","tryCatchPattern":"if let Err(err) = registers.write(name, values) {\n    if err.to_string().contains(\"does not support writing\") {\n        editor.set_error(format!(\"register '{name}' is read-only (computed by the editor)\"));\n    } else {\n        return Err(err);\n    }\n}","preventionTips":["Filter '#', '.', '%' out of any register-selection UI.","Route scripted writes to named or clipboard registers.","Remember '_' silently discards if you need a uniform write path."],"tags":["registers","clipboard","helix","rust"],"backgroundTag":null,"analyzedSha":"079a789e8cb08ead67f19e1971a1b7438b37354b","analyzedAt":"2026-08-16T09:09:59.668Z","schemaVersion":2},"datasetVersion":"2026-08-16T13:17:31.715Z"}