@@ -58,29 +58,31 @@ pub fn line_number<'doc>(
5858 .char_to_line(doc.selection(view.id).primary().cursor(text));
5959
6060 let config = config.line_number;
61+ let mode = doc.mode;
6162
6263 Box::new(move |line: usize, selected: bool, out: &mut String| {
6364 if line == last_line && !draw_last {
6465 write!(out, "{:>1$}", '~', width).unwrap();
6566 Some(linenr)
6667 } else {
67− use crate::editor::LineNumber;
68− let line = match config {
69− LineNumber::Absolute => line + 1,
70− LineNumber::Relative => {
71− if current_line == line {
72− line + 1
73− } else {
74− abs_diff(current_line, line)
75− }
76− }
68+ use crate::{document::Mode, editor::LineNumber};
69+
70+ let relative = config == LineNumber::Relative
71+ && mode != Mode::Insert
72+ && is_focused
73+ && current_line != line;
74+
75+ let display_num = if relative {
76+ abs_diff(current_line, line)
77+ } else {
78+ line + 1
7779 };
7880 let style = if selected && is_focused {
7981 linenr_select
8082 } else {
8183 linenr
8284 };
83− write!(out, "{:>1$}", line, width).unwrap();
85+ write!(out, "{:>1$}", display_num, width).unwrap();
8486 Some(style)
8587 }
8688 })