Как мешать emacs заменить underbar <-в режиме эс

Как сказал ThatOneDeveloper в их ответ , он не поддерживается стандартной библиотекой. Вы можете реализовать такую ​​функцию самостоятельно:

use std::ops::Deref;

#[derive(Clone)]
struct RcSome(Rc>);

impl RcSome {
    fn from(rc: &Rc>) -> RcSome {
        RcSome(rc.clone())
    }
}

impl Deref for RcSome {
    type Target = T;
    fn deref(&self) ->  &T {
        self.0.as_ref().as_ref().unwrap()
    }
}

Тогда вы можете сделать это

let rc_option: Rc> = Rc::new(Some(value));
let ok_value: RcSome = RcSome::from(&rc_option);

Обратите внимание, что это вызовет панику, если rc_option содержит None. Но ok_value теперь будет вести себя как Rc - то есть вы можете clone() это сделать и сделать ok_value.some_method_of_T(). ok_value также не разделяет время жизни с rc_option, поэтому может пережить его.

54
задан Aza 17 November 2013 в 19:22
поделиться

2 ответа

Из руководства ESS (смотрите раздел "Изменения/Новые возможности в версии 5.2.0"):

ESS[S]: Нажатие символа подчеркивания ("_") один раз вставляет " <- " (как и раньше); нажатие символа подчеркивания дважды вставляет литеральное подчеркивание. Чтобы остановить это умное поведение, добавьте "(ess-toggle-underscore nil)" в ваш .emacs после загрузки ess-сайта

64
ответ дан 7 November 2019 в 08:05
поделиться

Как продолжение на ответе @mmorin. Для установки привязки клавиш для оператора присваивания тот же путь как в Rstudio добавляют следующее в Вашем .emacs файл

(ess-toggle-underscore t)
(ess-toggle-underscore nil)
(define-key ess-mode-map (kbd "M--") (lambda () (interactive) (just-one-space 1) (insert "<-") (just-one-space 1)))
(define-key inferior-ess-mode-map (kbd "M--") (lambda () (interactive) (just-one-space 1) (insert "<-") (just-one-space 1)))

0
ответ дан 7 November 2019 в 08:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: