Опыт emacs или neovim в качестве IDE для C#/F#
От: vaa  
Дата: 10.01.22 02:18
Оценка:
У кого-нибудь есть опыт использования?
Стоит ли пытаться? На досуге методом тыка пытался запустить emacs LSP C# на vanilla и на spacemacs
lsp сервер вообще никак. а omnisharp почему то покрасил весь код ошибками типа "object не найден".
и автокомплит был такой себе (spacemacs).
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: Опыт emacs или neovim в качестве IDE для C#/F#
От: Михaил  
Дата: 10.01.22 04:06
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>У кого-нибудь есть опыт использования?

vaa>Стоит ли пытаться? На досуге методом тыка пытался запустить emacs LSP C# на vanilla и на spacemacs
vaa>lsp сервер вообще никак. а omnisharp почему то покрасил весь код ошибками типа "object не найден".
vaa>и автокомплит был такой себе (spacemacs).

А в чем смысл? Имхо, вим имеет смысл использовать, только если админишь сервер через ssh. Емакс же вообще по ощущениям тормозной, что непростительно для консольной утилиты.
Re[2]: Опыт emacs или neovim в качестве IDE для C#/F#
От: vaa  
Дата: 10.01.22 04:22
Оценка:
Здравствуйте, Михaил, Вы писали:

М>А в чем смысл? Имхо, вим имеет смысл использовать, только если админишь сервер через ssh. Емакс же вообще по ощущениям тормозной, что непростительно для консольной утилиты.\


полноценный mouse-free и да возможность работы хоть в терминале(локально или удаленно) хоть в GUI.

емакс тормозит только при старте и то если это уровень спэйсмакса(по кол-ву настроек).
ну т.е. в работе он на порядок шустрее например vs code.
Опять же, не знаю как сейчас, но пару лет назад стоило поставить на студию решарпер, как она тут же превращался в пони.

vim вроде вообще веб-разработчики с телефона юзают с использованием внешней клавы.
имхо, это форсит разработку.
ПС поделюсь своим личным наблюдением. когда делаешь попытку кодить без мышки, прям чуствуешь как внимание меньше рассеивается.
в отличии от кодинга в vs code\vs studio где очень много ситуаций когда без мышки ну никак.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[3]: Опыт emacs или neovim в качестве IDE для C#/F#
От: amironov79  
Дата: 10.01.22 11:22
Оценка: 9 (2) +1
Здравствуйте, vaa, Вы писали:

По моему опыту переходить на emacs при наличии vscode нет смысла, не в контексте шарпов, а вообще. С vi(m) познакомиться стоит, выучить десяток-другой комбинаций, чтобы можно было на удаленной машине пару строчек в конфиге поправить. Для большего, только если из любви к искусству.

vaa>полноценный mouse-free и да возможность работы хоть в терминале(локально или удаленно) хоть в GUI.


Можно пример, когда без mouse-free в vscode не обойтись?

vaa>емакс тормозит только при старте и то если это уровень спэйсмакса(по кол-ву настроек).

vaa>ну т.е. в работе он на порядок шустрее например vs code.

Расширения у emacs тоже не быстрые. И есть проблемы с асинхронностью, какая-нибудь длительная операция может запросто заблокировать весь редактор.

vaa>ПС поделюсь своим личным наблюдением. когда делаешь попытку кодить без мышки, прям чуствуешь как внимание меньше рассеивается.

vaa>в отличии от кодинга в vs code\vs studio где очень много ситуаций когда без мышки ну никак.

У меня обратная ситуация: для редких операций проще дернуться за мышкой, чем вспоминать комбинацию.
Re[4]: Опыт emacs или neovim в качестве IDE для C#/F#
От: vaa  
Дата: 14.01.22 02:14
Оценка:
Здравствуйте, amironov79, Вы писали:

A>Можно пример, когда без mouse-free в vscode не обойтись?


Вообще, вы правы, наверно единственная претензиция к кодэ прожорливость.
ssh наверно можно через плагин.
до остального можно дотянутся через палитру комманд (CTRL+SHIFT+P)
это сделано очень удобно.
Точно помню что для того чтобы в проводнике проекта создать файл в подпапке нужно сначала спозиционироваться в проводнике и потом через палитру создать файл,
если из контекстного меню то новый файл кидается в не текущую папку. по крайней мере последний раз так было.

А вот интересно, можно ли там писать обработчики текста(макросы), например такие:

(defun my-wrapper ()
  (interactive)
  (let* ((txt (buffer-substring (mark) (point)))
     (lines (split-string txt "\n")))
    (kill-region (mark) (point))
    (insert (mapconcat '(lambda (s) (concat "public " s " {get; set;}" ))
               lines "\n"))))

(defun my-kbd ()
  (let ((my-key-map (current-local-map)))
    (local-unset-key (kbd "<f9>"))
    (define-key my-key-map (kbd "<f9>") 'my-wrapper)))


(add-hook 'text-mode-hook 'my-kbd)


Выделяешь допустим:
int Id
string Name
DateTime Created

F9 =>
public int Id {get; set;}
public string Name {get; set;}
public DateTime Created {get; set;}


Пример конечно может детский, но очень часто хочется чтобы такие возможности были и не в виде кодогенераторов C#
который даже по концепции очень сложны и уж точно не подходят для одноразового применения.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[5]: Опыт emacs или neovim в качестве IDE для C#/F#
От: amironov79  
Дата: 14.01.22 06:31
Оценка: +1
Здравствуйте, vaa, Вы писали:

vaa>Вообще, вы правы, наверно единственная претензиция к кодэ прожорливость.


Ну у emacs с этим тоже не всё в порядеке. При этом, еще раз повторю, проблема с асинхронностью очень напрягает.

vaa>ssh наверно можно через плагин.


Да, отсутствие аналога tramp было долгое время сдерживающим фактором, но сейчас есть плагины remote-{ssh,containers} для полноценной разработки на удаленном узле и в контейнере, есть отдельные плаги, чтобы просто открыть удаленную папку.

vaa>до остального можно дотянутся через палитру комманд (CTRL+SHIFT+P)

vaa>это сделано очень удобно.
vaa>Точно помню что для того чтобы в проводнике проекта создать файл в подпапке нужно сначала спозиционироваться в проводнике и потом через палитру создать файл,
vaa>если из контекстного меню то новый файл кидается в не текущую папку. по крайней мере последний раз так было.

Ctrl-N, Ctrl-S и вводишь путь до нового файла. Еще посмотри опцию "files.simpleDialog.enable", она включает встроенный файловый диалог вместо системного.

vaa>А вот интересно, можно ли там писать обработчики текста(макросы), например такие:


Наверное можно, но я таким не пользуюсь. Для простых случаев достаточно replace-regexp (что-нибудь наподобие "^(.*) (.*)$" -> "public $1 $2 {get; set;}"), для более сложных уже нужны тулы для рефакторинга.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.