diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs index 4e13f74a..504de73f 100644 --- a/helix-term/src/commands.rs +++ b/helix-term/src/commands.rs @@ -681,7 +681,24 @@ fn kill_to_line_start(cx: &mut Context) { let selection = doc.selection(view.id).clone().transform(|range| { let line = range.cursor_line(text); - range.put_cursor(text, text.line_to_char(line), true) + let first_char = text.line_to_char(line); + let anchor = range.cursor(text); + let head = if anchor == first_char && line != 0 { + // select until previous line + line_end_char_index(&text, line - 1) + } else if let Some(pos) = find_first_non_whitespace_char(text.line(line)) { + if first_char + pos < anchor { + // select until first non-blank in line if cursor is after it + first_char + pos + } else { + // select until start of line + first_char + } + } else { + // select until start of line + first_char + }; + Range::new(head, anchor) }); delete_selection_insert_mode(doc, view, &selection); }