当我尝试在emacs eshell模式下进行git提交时:
git commit -a -m "message"
我收到一个错误:
'c:\Program' is not recognized as an internal or external command, operable program or batch file.
同时在emacs shell模式中不存在此问题.如何使用git强制eshell正常工作?
那里.我是eshell的新手,现在我遇到了一个问题,我怎么能编写脚本.我已经尝试了(rm~/somefile)并且它工作了.所有的命令都是这样的?我应该如何编写条件代码和循环?我应该自定义什么来使系统使用eshell而不是其他命令来执行我的脚本,比如bash ,默认情况下? 我不是很擅长英语,我希望你能理解我的意思.我也会感谢我对英语表达的任何修正吗?
我正常工作的方法是为我正在处理的代码提供一个小的eshell缓冲区和一个更大的缓冲区.我使用eshell缓冲区进行编译和简单测试.
如果我想做git提交,当我以这种方式运行时,我总是会打开一个新的Emacs窗口.
我如何才能在当前的Emacs会话中简单地打开一个新的缓冲区?
想想:用eshells,一个la xmonad平铺我的emacs窗口.这可能吗?我可以Mx eshell打开第一个eshell实例,但是将来的调用只关注第一个实例.
我可以在eshell中以非root用户身份运行普通的linux命令.当我尝试su到root时,所有常用的linux命令都消失了(ls,cat等)我该怎么解决这个问题?
有没有办法编写从eshell缓冲区使用的.sh脚本?使用eshell(elisp)特定命令?
我想ediff $1 $2从我的执行compare.sh从ESHELL缓冲区内.
我想编写一个eshell函数,它包含一个现有的命令行脚本.为了做到这一点,我希望能够从eshell函数执行shell命令.我的第一直觉是做类似的事情
(defn eshell/myfunc ()
(shell-command "mycommand"))
Run Code Online (Sandbox Code Playgroud)
而这一类的作品,除少数问题.它运行在劣质shell中,而不是像真正的"exec"命令.这意味着,除其他外,eshell中的命令"myfunc"似乎在命令运行时阻塞.收集"mycommand"的输出,最后显示在Shell输出缓冲区中,但它不会复制正常shell函数的行为,标准输出在运行时会出现.
那么,这样做的正确方法是什么?
我打算在按RET时为每个提示使用bm.el Visible Bookmarks.我已经设法在某种程度上实现了这一点.如果缺少一些重要问题,请在下面评论我的代码:例如.我不知道我是否需要处理args而不仅仅是将它们传递给默认函数.
当我在空命令行上按RET时,我不想为该行添加书签.在将contol传递给默认函数之前,如何拦截命令行内容eshell-send-input?
(defun eshell-send-input-zAp (&optional use-region queue-p no-newline)
"eshell-send-input, customized to add bm-bookmark to prompt line"
(interactive)
(bm-bookmark-add)
(eshell-send-input use-region queue-p no-newline))
(add-hook 'eshell-mode-hook
#'(lambda ()
(define-key eshell-mode-map
[return]
'eshell-send-input-zAp)))
Run Code Online (Sandbox Code Playgroud) 我喜欢大约8左右的滚动边距.这意味着当光标位于顶部或底部的8行内时,缓冲区将开始滚动.但是,此方案不适用于eshell和ansi-term缓冲区,isql缓冲区或可能与emacs一起使用的任何REPL缓冲区.在任何一个缓冲区中,当一个缓冲区执行任何操作时,它会立即向上滚动缓冲区,以便缓冲区底部和输入线之间有8条线,使得它最好处于尴尬状态,在最坏情况下无法使用任何类似终端的终端emacs中的缓冲区,具体取决于具体情况.
除非是全局的,否则没有缓冲区似乎能识别scroll-margin变量.因此,虽然我可以使用不同模式中的挂钩将变量设置为不同的值,但它会影响我的所有打开缓冲区.
所以我要说我正在编辑一些代码.我决定在shell中做一些事情.我的shell-mode-hooks将scroll-margin设置为0(这样它们可以使用).然后,对于所有缓冲区,滚动边距设置为0 ,这使得在我的编码缓冲区中滚动变得笨拙.但是如果我打开一个新的编码缓冲区,它会将我的滚动边距设置回8.然后我的shell缓冲区很难或无法使用,因为只要它们从命令获得焦点或显示输出,它就会立即向上滚动8个空格.
除了为所有缓冲区保持全局滚动边距0之外,是否有任何解决方案?
如何将 ctrl+D 发送到 Emacs 的 Eshell 中?看起来 Emacs 拦截了我向 shell 发送任何控制键 + 字母的所有尝试,并尝试将其解释为它自己的命令。如何将该组合发送到 Emacs 的 EShell?