<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Terminal Multiplexer on aiken&#39;s blog</title>
    <link>https://aikenh.cn/tags/terminal-multiplexer/</link>
    <description>Recent content in Terminal Multiplexer on aiken&#39;s blog</description>
    <generator>Hugo -- 0.137.0</generator>
    <language>en-us</language>
    <lastBuildDate>Sat, 20 May 2023 16:40:19 +0000</lastBuildDate>
    <follow_challenge>
      <feedId>90080597450814464</feedId>
      <userId>72439538841050112</userId>
    </follow_challenge>
    <atom:link href="https://aikenh.cn/tags/terminal-multiplexer/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Terminal multiplexer Zellij</title>
      <link>https://aikenh.cn/posts/linuxzellij/</link>
      <pubDate>Sat, 20 May 2023 16:40:19 +0000</pubDate>
      <guid>https://aikenh.cn/posts/linuxzellij/</guid>
      <description>It is recommended to replace tmux with zellij</description>
      <content:encoded><![CDATA[<blockquote>
<p>Tmux 作为一款优秀的终端复用器，前面已经介绍过，这里在介绍一款有着相同功能的平替，个人认为 zellij 的 UI 各方面的设计，使得其相比于 Tmux 有着更低的入门难度，也避免了需要记大量快捷键，因此这里介绍一下该工具。</p>
</blockquote>
<p><a href="https://zellij.dev/documentation/installation.html" target="_blank" rel="noopener">Zellij</a>
 是一款终端复用器，有什么功能可以完全参考 Tmux ，还支持了许多有趣的特性和自定义 Layout 等功能（可能后续用到的话会完善该部分笔记），详细的可以参考官网的介绍，接下来就简单的介绍一下安装和一些自定义的 Alias。</p>
<h2 id="install-安装">Install 安装</h2>
<p>Zellij 是基于 Rust 编写，因此在安装之前需要安装 rust 和 cargo（类似 rust 的包管理器），安装可以参考 <a href="https://www.rust-lang.org/tools/install" target="_blank" rel="noopener">Rust 官方网站（推荐）</a>
 |  <a href="https://doc.rust-lang.org/cargo/getting-started/installation.html" target="_blank" rel="noopener">The Cargo Book</a>
  | <a href="https://rustwiki.org/zh-CN/cargo/getting-started/installation.html" target="_blank" rel="noopener">Rust Wiki CN</a>
</p>
<p>官方网站中介绍了 WSL 的安装指令如下：</p>
<div class="code-block">
    <div class="code-title" onclick="toggleCode(this)">
        
        <span class="code-block-open"><ion-icon name="chevron-down-outline"></ion-icon></span>
        <span class="code-block-close"><ion-icon name="chevron-forward-outline"></ion-icon></ion-icon></span>
        <span>bash</span>
    </div>
    <div class="code-content">
        
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl --proto <span class="s1">&#39;=https&#39;</span> --tlsv1.2 -sSf https://sh.rustup.rs <span class="p">|</span> sh
</span></span><span class="line"><span class="cl"><span class="c1">#--proto以及--tlsvl在Linux或者Macos安装的时候可以忽略</span></span></span></code></pre></div>
    </div>
</div>

<script>
function toggleCode(element) {
    const codeContent = element.nextElementSibling;
    if (codeContent.style.display === "none" || codeContent.style.display === "") {
        codeContent.style.display = "block"; 
        codeContent.parentNode.classList.remove("code-has-hidden-child");
    } else {
        codeContent.style.display = "none"; 
        codeContent.parentNode.classList.add("code-has-hidden-child");
    }
}
</script><p>安装完成后可以使用如下命令，基于 Cargo 安装 zellij：</p>
<div class="code-block">
    <div class="code-title" onclick="toggleCode(this)">
        
        <span class="code-block-open"><ion-icon name="chevron-down-outline"></ion-icon></span>
        <span class="code-block-close"><ion-icon name="chevron-forward-outline"></ion-icon></ion-icon></span>
        <span>bash</span>
    </div>
    <div class="code-content">
        
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">cargo install --locked zellij</span></span></code></pre></div>
    </div>
</div>

<script>
function toggleCode(element) {
    const codeContent = element.nextElementSibling;
    if (codeContent.style.display === "none" || codeContent.style.display === "") {
        codeContent.style.display = "block"; 
        codeContent.parentNode.classList.remove("code-has-hidden-child");
    } else {
        codeContent.style.display = "none"; 
        codeContent.parentNode.classList.add("code-has-hidden-child");
    }
}
</script><p>如果出现了问题也可以尝试先更新 rust</p>
<div class="code-block">
    <div class="code-title" onclick="toggleCode(this)">
        
        <span class="code-block-open"><ion-icon name="chevron-down-outline"></ion-icon></span>
        <span class="code-block-close"><ion-icon name="chevron-forward-outline"></ion-icon></ion-icon></span>
        <span>bash</span>
    </div>
    <div class="code-content">
        
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">rustup update</span></span></code></pre></div>
    </div>
</div>

<script>
function toggleCode(element) {
    const codeContent = element.nextElementSibling;
    if (codeContent.style.display === "none" || codeContent.style.display === "") {
        codeContent.style.display = "block"; 
        codeContent.parentNode.classList.remove("code-has-hidden-child");
    } else {
        codeContent.style.display = "none"; 
        codeContent.parentNode.classList.add("code-has-hidden-child");
    }
}
</script><h3 id="binary-download-二进制文件安装下载">Binary Download 二进制文件安装下载</h3>
<p>如果是<strong>不便于安装</strong>的环境可以使用这种方式来使用 zellij，在 <a href="https://github.com/zellij-org/zellij/releases" target="_blank" rel="noopener">release page</a>
 中下载二进制包 <code>.tar.gz</code> 后执行：</p>
<p>解压二进制文件：</p>
<div class="code-block">
    <div class="code-title" onclick="toggleCode(this)">
        
        <span class="code-block-open"><ion-icon name="chevron-down-outline"></ion-icon></span>
        <span class="code-block-close"><ion-icon name="chevron-forward-outline"></ion-icon></ion-icon></span>
        <span>bash</span>
    </div>
    <div class="code-content">
        
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">tar -xvf zellij*.tar.gz</span></span></code></pre></div>
    </div>
</div>

<script>
function toggleCode(element) {
    const codeContent = element.nextElementSibling;
    if (codeContent.style.display === "none" || codeContent.style.display === "") {
        codeContent.style.display = "block"; 
        codeContent.parentNode.classList.remove("code-has-hidden-child");
    } else {
        codeContent.style.display = "none"; 
        codeContent.parentNode.classList.add("code-has-hidden-child");
    }
}
</script><p>修改执行权限：</p>
<div class="code-block">
    <div class="code-title" onclick="toggleCode(this)">
        
        <span class="code-block-open"><ion-icon name="chevron-down-outline"></ion-icon></span>
        <span class="code-block-close"><ion-icon name="chevron-forward-outline"></ion-icon></ion-icon></span>
        <span>bash</span>
    </div>
    <div class="code-content">
        
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">chmod +x zellij</span></span></code></pre></div>
    </div>
</div>

<script>
function toggleCode(element) {
    const codeContent = element.nextElementSibling;
    if (codeContent.style.display === "none" || codeContent.style.display === "") {
        codeContent.style.display = "block"; 
        codeContent.parentNode.classList.remove("code-has-hidden-child");
    } else {
        codeContent.style.display = "none"; 
        codeContent.parentNode.classList.add("code-has-hidden-child");
    }
}
</script><p>然后就可以直接执行 zellij 文件了，可以将该文件路径<a href="https://www.baeldung.com/linux/path-variable" target="_blank" rel="noopener">加入系统的路径</a>
中，即可随处调用（也可以使用 alias 的方式），可以参考一下上文中系统路径的添加方法。</p>
<h2 id="alias-别名设置">Alias 别名设置</h2>
<p>由于 Zellij 的一些指令比较长，可以简单的设置一下别名（bashrc, zshrc），用来便于日常使用：</p>
<div class="code-block">
    <div class="code-title" onclick="toggleCode(this)">
        
        <span class="code-block-open"><ion-icon name="chevron-down-outline"></ion-icon></span>
        <span class="code-block-close"><ion-icon name="chevron-forward-outline"></ion-icon></ion-icon></span>
        <span>bash</span>
    </div>
    <div class="code-content">
        
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">alias</span> <span class="nv">ze</span><span class="o">=</span><span class="s1">&#39;zellij&#39;</span>
</span></span><span class="line"><span class="cl"><span class="nb">alias</span> <span class="nv">zels</span><span class="o">=</span><span class="s1">&#39;zellij list-sessions&#39;</span>
</span></span><span class="line"><span class="cl"><span class="nb">alias</span> <span class="nv">zeks</span><span class="o">=</span><span class="s1">&#39;zellij kill-sessions&#39;</span>
</span></span><span class="line"><span class="cl"><span class="nb">alias</span> <span class="nv">zeat</span><span class="o">=</span><span class="s1">&#39;zellij attach&#39;</span></span></span></code></pre></div>
    </div>
</div>

<script>
function toggleCode(element) {
    const codeContent = element.nextElementSibling;
    if (codeContent.style.display === "none" || codeContent.style.display === "") {
        codeContent.style.display = "block"; 
        codeContent.parentNode.classList.remove("code-has-hidden-child");
    } else {
        codeContent.style.display = "none"; 
        codeContent.parentNode.classList.add("code-has-hidden-child");
    }
}
</script><p>可以看出上述的指令和 Tmux 的十分相似，功能也和名称一致，这里就不在赘述，其他的使用快捷键在进入了 zellij 界面后都可以看到。</p>
<h3 id="效果展示">效果展示</h3>
<p>简单放一下 zellij 使用的效果图，相信能 Get 到为啥说比较容易上手，同时 UI 也十分的舒服。</p>
<p>
<div class="post-img-view">
  <a data-fancybox="gallery" href="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/20230520170858.png">
    <img alt="image.png" loading="lazy" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/20230520170858.png"class="responsive-image" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/20230520170858.png" style="display: block; margin: 0 auto;"
      alt="image.png"  />
  </a>
</div>


<script>
  document.addEventListener("DOMContentLoaded", function() {
      var images = document.querySelectorAll(".responsive-image");
      var maxHeight = window.innerHeight / 2.5;
      images.forEach(function(image) {
          image.style.maxHeight = maxHeight + "px";
      });
  });
</script>
</p>
<p>
<div class="post-img-view">
  <a data-fancybox="gallery" href="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/20230520170932.png">
    <img alt="image.png" loading="lazy" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/20230520170932.png"class="responsive-image" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/20230520170932.png" style="display: block; margin: 0 auto;"
      alt="image.png"  />
  </a>
</div>


<script>
  document.addEventListener("DOMContentLoaded", function() {
      var images = document.querySelectorAll(".responsive-image");
      var maxHeight = window.innerHeight / 2.5;
      images.forEach(function(image) {
          image.style.maxHeight = maxHeight + "px";
      });
  });
</script>
</p>
<h2 id="fi">FI</h2>
<p>基础的功能对于日常使用已经十分充分，后续又其他的功能需求（如果有自己定制的东西）的话会慢慢更新，否则的话应该就是基于官方文档去配置和使用了。</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
