Значит так. Запоминаем текущую строку перед заменой.

Код:
int line = sci.LineFromPosition(sci.CurrentPos);
Потом, после установки текста, ее возвращаем.

Код:
sci.Text = src;
sci.GotoLine (line);
Но! Курсор будет в начале строки. Почему? Потому, что у нас будут изменения в числе общих символов (например табы на пробелы сменили), и чтобы позиционировать курсор по символам, надо будет производить ряд манипуляций, по запоминанию текста строки и восстановлении по нему позиции, а мне сейчас эти делать лень

Если вам нужно точное восстановление позиции, то скачайте исходники FD, найдите там файл trunk\FD3\PluginCore\ScintillaNet\ScintillaControl.cs и получите все методы и свойства Scintilla.