<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Camilo Martinez</title>
    <description>The latest articles on DEV Community by Camilo Martinez (@equiman).</description>
    <link>https://dev.to/equiman</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F60846%2Fa7b57cd0-916f-408e-ad8e-86c03c941327.jpg</url>
      <title>DEV Community: Camilo Martinez</title>
      <link>https://dev.to/equiman</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/equiman"/>
    <language>en</language>
    <item>
      <title>Dev Playground an alternative to RunJS</title>
      <dc:creator>Camilo Martinez</dc:creator>
      <pubDate>Sat, 16 Nov 2024 16:45:43 +0000</pubDate>
      <link>https://dev.to/equiman/dev-playground-an-alternative-to-runjs-39ah</link>
      <guid>https://dev.to/equiman/dev-playground-an-alternative-to-runjs-39ah</guid>
      <description>&lt;p&gt;&lt;a href="https://runjs.app/" rel="noopener noreferrer"&gt;RunJS&lt;/a&gt; is a commendable project that we have utilized for quick code testing. Unfortunately, the latest version imposes a daily limit of 50 runs.&lt;/p&gt;

&lt;p&gt;In search of a viable alternative, I explored numerous cloud-based solutions. However, I prefer a local environment option.&lt;/p&gt;

&lt;p&gt;Consequently, I decided to develop my own truly &lt;strong&gt;FREE&lt;/strong&gt; solution, which is available in the &lt;a href="https://github.com/deinsoftware/dev-playground" rel="noopener noreferrer"&gt;Dev Playgrond&lt;/a&gt; repository.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzp132il8k5l16azcrczq.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzp132il8k5l16azcrczq.gif" alt="dev-playgrond" width="600" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dev Playground&lt;/strong&gt; is a pre-configured project over &lt;code&gt;vscode&lt;/code&gt; and the community version of &lt;code&gt;console-ninja&lt;/code&gt;, designed to provide a more open and flexible solution, free from limitations.&lt;/p&gt;

&lt;p&gt;By leveraging your local environment and the power of &lt;code&gt;vscode&lt;/code&gt; and its extensions, you have complete control over your development experience. There are no restrictions on the number of runs, saving files, using external packages, managing multiple tabs, customizing themes, or installing extensions.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Comments and contributions are welcome. If you have recommendations, I'm open to listening and learning.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;strong&gt;That’s All Folks!&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Happy Coding&lt;/strong&gt; 🖖&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sponsors/deinsoftware" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmkgsx4aw6qn9i9ax6as9.png" alt="beer" width="360" height="86"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>typescript</category>
      <category>node</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Basic and advance Array sorting with JavaScript</title>
      <dc:creator>Camilo Martinez</dc:creator>
      <pubDate>Thu, 27 Apr 2023 21:15:56 +0000</pubDate>
      <link>https://dev.to/equiman/basic-and-advance-array-sorting-21d4</link>
      <guid>https://dev.to/equiman/basic-and-advance-array-sorting-21d4</guid>
      <description>&lt;h2&gt;
  
  
  Basic
&lt;/h2&gt;

&lt;p&gt;Sort an array by one value is relatively simple because a compare function passed to &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#description" rel="noopener noreferrer"&gt;array sort&lt;/a&gt; follows this rule to apply the sorting order based on:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Return value&lt;/th&gt;
&lt;th&gt;Sorting order&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Negative&lt;/td&gt;
&lt;td&gt;less (sort &lt;code&gt;a&lt;/code&gt; before &lt;code&gt;z&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zero&lt;/td&gt;
&lt;td&gt;equal (keep original order &lt;code&gt;a&lt;/code&gt; and &lt;code&gt;z&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Positive&lt;/td&gt;
&lt;td&gt;greater (sort &lt;code&gt;z&lt;/code&gt; before &lt;code&gt;a&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Taking that in mind there are different approach to take depending of the data type.&lt;/p&gt;

&lt;h3&gt;
  
  
  String
&lt;/h3&gt;

&lt;p&gt;You can use &lt;code&gt;.sort()&lt;/code&gt; without parameters to order strings, but is recommended to use &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare" rel="noopener noreferrer"&gt;localeCompare&lt;/a&gt; because it can be configured to ignore punctuation (accents), returns &lt;code&gt;-1&lt;/code&gt;, &lt;code&gt;0&lt;/code&gt;, &lt;code&gt;1&lt;/code&gt; if &lt;code&gt;a &amp;lt; z&lt;/code&gt;, &lt;code&gt;a == z&lt;/code&gt;, &lt;code&gt;a &amp;gt; z&lt;/code&gt;.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;animals&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cat&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;dog&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;wolf&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;lion&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;sheep&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;antelope&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nx"&gt;animals&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;localeCompare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;animals&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// [ 'antelope', 'cat', 'dog', 'lion', 'sheep', 'wolf' ]&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Numeric
&lt;/h3&gt;

&lt;p&gt;Subtraction works on numeric fields, because &lt;code&gt;a - z&lt;/code&gt; gives &lt;code&gt;-&lt;/code&gt;, &lt;code&gt;0&lt;/code&gt;, &lt;code&gt;+&lt;/code&gt; if &lt;code&gt;a &amp;lt; z&lt;/code&gt;, &lt;code&gt;a == z&lt;/code&gt;, &lt;code&gt;a &amp;gt; z&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;//[ 0, 1, 2, 3, 10, 20, 30 ]&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Date
&lt;/h3&gt;

&lt;p&gt;Date (with or without time) compares with subtraction because date math converts to milliseconds since 1970.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dates&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Mar 18 2016&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;09/24/2017&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Jan 22 2022&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1998-05-21&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nx"&gt;dates&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dates&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// [ '1998-05-21', 'Mar 18 2016', '09/24/2017', 'Jan 22 2022' ]&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Boolean
&lt;/h3&gt;

&lt;p&gt;Boolean compare with subtraction, which is guaranteed to turn &lt;code&gt;true&lt;/code&gt; and &lt;code&gt;false&lt;/code&gt; to &lt;code&gt;1&lt;/code&gt; and &lt;code&gt;0&lt;/code&gt; (therefore the subtraction produces &lt;code&gt;-1&lt;/code&gt; or &lt;code&gt;0&lt;/code&gt; or &lt;code&gt;1&lt;/code&gt;).&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nx"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nc"&gt;Boolean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nc"&gt;Boolean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Boolean&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;//[ false, false, true, true, true ]&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Drawing attention with the &lt;code&gt;Boolean()&lt;/code&gt; constructor, even if they're already Boolean.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Reverse Order
&lt;/h3&gt;

&lt;p&gt;Swapping the comparison values&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="nx"&gt;animals&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;localeCompare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;dates&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="nx"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nc"&gt;Boolean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nc"&gt;Boolean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Or negate the comparison &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="nx"&gt;animals&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;localeCompare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt; &lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="nx"&gt;dates&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="nx"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nc"&gt;Boolean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nc"&gt;Boolean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;))&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 take in mind this negate trick because it can be useful later for advance sorting&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Shuffle
&lt;/h3&gt;

&lt;p&gt;Sometimes we need to shuffle or unsort an array, for example on a playlist or choosing a winner. No matters the type we can use the same.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="nx"&gt;animals&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;dates&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;code&gt;Math.random()&lt;/code&gt; returns a value between &lt;code&gt;0&lt;/code&gt; and &lt;code&gt;&amp;lt;1&lt;/code&gt;, then gives &lt;code&gt;-&lt;/code&gt;, &lt;code&gt;0&lt;/code&gt;, &lt;code&gt;+&lt;/code&gt; if &lt;code&gt;&amp;lt; 0.5&lt;/code&gt;, &lt;code&gt;= 0.5&lt;/code&gt;, &lt;code&gt;&amp;gt; 0.5&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Advanced
&lt;/h2&gt;

&lt;p&gt;To sort an array of objects we are going to use all the previous examples, but if we need to made sorting using multiple properties, we are going to need some special tricks.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;records&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;country&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Colombia&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;hasDetail&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2023-04-27T02:23:39.000Z&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;country&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Spain&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="nx"&gt;_000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;hasDetail&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2015-04-27T23:31:05.000Z&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;country&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Argentina&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="nx"&gt;_000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;hasDetail&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2000-01-01T00:00:00.000Z&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;5&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;country&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Colombia&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="nx"&gt;_000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;hasDetail&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2023-04-27T02:23:39.000Z&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;6&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;country&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Spain&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="nx"&gt;_000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;hasDetail&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2018-04-27T23:31:05.000Z&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;4&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;country&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Argentina&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;hasDetail&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2020-01-01T23:15:00.000Z&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This raw data (without sorting) using &lt;code&gt;console.table(records)&lt;/code&gt; will show:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;id&lt;/th&gt;
&lt;th&gt;country&lt;/th&gt;
&lt;th&gt;value&lt;/th&gt;
&lt;th&gt;hasDetail&lt;/th&gt;
&lt;th&gt;timestamp&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;'1'&lt;/td&gt;
&lt;td&gt;'Colombia'&lt;/td&gt;
&lt;td&gt;500&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;'2023-04-27T02:23:39.000Z'&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;'2'&lt;/td&gt;
&lt;td&gt;'Spain'&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;'2015-04-27T23:31:05.000Z'&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;'3'&lt;/td&gt;
&lt;td&gt;'Argentina'&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;td&gt;false&lt;/td&gt;
&lt;td&gt;'2000-01-01T00:00:00.000Z'&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;'5'&lt;/td&gt;
&lt;td&gt;'Colombia'&lt;/td&gt;
&lt;td&gt;2000&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;'2023-04-27T02:23:39.000Z'&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;'6'&lt;/td&gt;
&lt;td&gt;'Spain'&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;td&gt;false&lt;/td&gt;
&lt;td&gt;'2018-04-27T23:31:05.000Z'&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;'4'&lt;/td&gt;
&lt;td&gt;'Argentina'&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;'2020-01-01T23:15:00.000Z'&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;First, we need to create a sort object with each property.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="nx"&gt;records&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sort&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;localeCompare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="c1"&gt;//string&lt;/span&gt;
    &lt;span class="na"&gt;country&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;country&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;localeCompare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;country&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="c1"&gt;//string&lt;/span&gt;
    &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;//numeric&lt;/span&gt;
    &lt;span class="na"&gt;hasDetail&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Boolean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hasDetail&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nc"&gt;Boolean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hasDetail&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="c1"&gt;//boolean&lt;/span&gt;
    &lt;span class="na"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;//date&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Then return the order according to your needs using the &lt;code&gt;||&lt;/code&gt; operator, taking in mind that it follows the priority from left to right and, to reverse order use the &lt;strong&gt;negate trick&lt;/strong&gt; in any field.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="nx"&gt;records&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;...&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;country&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;timestamp&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This means we want to sort by country ascending, then by value descending and then by timestamp ascending. The result will be:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;id&lt;/th&gt;
&lt;th&gt;🔼country&lt;/th&gt;
&lt;th&gt;🔽value&lt;/th&gt;
&lt;th&gt;hasDetail&lt;/th&gt;
&lt;th&gt;🔼timestamp&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;'3'&lt;/td&gt;
&lt;td&gt;'Argentina'&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;td&gt;false&lt;/td&gt;
&lt;td&gt;'2000-01-01T00:00:00.000Z'&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;'4'&lt;/td&gt;
&lt;td&gt;'Argentina'&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;'2020-01-01T23:15:00.000Z'&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;'5'&lt;/td&gt;
&lt;td&gt;'Colombia'&lt;/td&gt;
&lt;td&gt;2000&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;'2023-04-27T02:23:39.000Z'&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;'1'&lt;/td&gt;
&lt;td&gt;'Colombia'&lt;/td&gt;
&lt;td&gt;500&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;'2023-04-27T02:23:39.000Z'&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;'2'&lt;/td&gt;
&lt;td&gt;'Spain'&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;'2015-04-27T23:31:05.000Z'&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;'6'&lt;/td&gt;
&lt;td&gt;'Spain'&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;td&gt;false&lt;/td&gt;
&lt;td&gt;'2018-04-27T23:31:05.000Z'&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort" rel="noopener noreferrer"&gt;&lt;code&gt;.sort()&lt;/code&gt;&lt;/a&gt; mutes the array, &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toSorted" rel="noopener noreferrer"&gt;&lt;code&gt;.toSorted()&lt;/code&gt;&lt;/a&gt; do the same but returns a new array with the elements sorted.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Bonus
&lt;/h2&gt;

&lt;p&gt;These array sorting methods are available as snippets on the &lt;a href="https://marketplace.visualstudio.com/items?itemName=deinsoftware.arrow-function-snippets" rel="noopener noreferrer"&gt;Arrow Functions Snippets&lt;/a&gt; extension for VSCode.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=deinsoftware.arrow-function-snippets" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr0pfio7l7s2nd4iv4hoo.png" alt="Arrow Function Snippets"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;That’s All Folks!&lt;br&gt;
Happy Coding&lt;/strong&gt; 🖖&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sponsors/deinsoftware" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmkgsx4aw6qn9i9ax6as9.png" alt="beer"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>VSCode - Hidden Browser Inside</title>
      <dc:creator>Camilo Martinez</dc:creator>
      <pubDate>Mon, 03 Apr 2023 02:27:32 +0000</pubDate>
      <link>https://dev.to/equiman/vscode-browser-inside-2b06</link>
      <guid>https://dev.to/equiman/vscode-browser-inside-2b06</guid>
      <description>&lt;p&gt;There are a lot of options like &lt;strong&gt;npm packages&lt;/strong&gt; or &lt;strong&gt;VSCode extension&lt;/strong&gt; to create a live server. For me, one of the better is using Vite as a live server&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

npx vite dev &lt;span class="nt"&gt;--port&lt;/span&gt; 3000


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;It's my favorite option because it can be used on projects that don't use vite under the hood, given us Hot Reload with a simple project with vanilla HTML, CSS, and JavaScript, and also use with debugger extensions like &lt;a href="https://marketplace.visualstudio.com/items?itemName=WallabyJs.console-ninja" rel="noopener noreferrer"&gt;Console Ninja&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;That's a piece of good information to have, but surely that is not what you are here, right?&lt;/p&gt;

&lt;p&gt;Ok, I'll show you a hidden 💎 in VSCode where you can open this live server (or a page) in a new tab with a simple browser inside.&lt;/p&gt;

&lt;p&gt;Open the command palette with &lt;code&gt;ctrl+shift+p&lt;/code&gt; and search for &lt;strong&gt;Simple Browser&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frxu38b4vfu2dmlr8khzk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frxu38b4vfu2dmlr8khzk.png" alt="simple-browser"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Press the &lt;code&gt;return&lt;/code&gt; key and write &lt;code&gt;http://localhost:3000&lt;/code&gt; or the URL you want to open and press the &lt;code&gt;return&lt;/code&gt; key again.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs7btd3kyfbtbb4nmyops.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs7btd3kyfbtbb4nmyops.png" alt="localhost"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It will open a new tab inside VSCode with a simple browser and you can move aside to see the code and the result at the same time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmjcti91ikk1gfy924yv6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmjcti91ikk1gfy924yv6.png" alt="new-tab"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;It was good, but take a lot of steps and effort. I'll show you how to create a task and assign a shortcut to open the simple browser easily.&lt;/p&gt;

&lt;p&gt;Start creating a &lt;code&gt;.vscode&lt;/code&gt; folder with a &lt;code&gt;tasks.json&lt;/code&gt; file inside the project, or if you want it to be available at profile level (no matter the project) press &lt;code&gt;ctrl+shift+p&lt;/code&gt; (or &lt;code&gt;cmd+shift+p&lt;/code&gt; on macOS) and run the command &lt;strong&gt;Tasks: Open User Tasks&lt;/strong&gt;.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

# 📄 File: /.vscode/tasks.json
-----------------------------------

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Simple Browser",
            "command": "${input:openSimpleBrowser}",
            "problemMatcher": []
        }
    ],
    "inputs": [
        {
            "id": "openSimpleBrowser",
            "type": "command",
            "command": "simpleBrowser.show",
            "args": [
                "http://localhost:3000"
            ]
        }
    ]
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;And also define the shortcut using the &lt;code&gt;File &amp;gt; Preferences &amp;gt; Keyboard Shortcuts&lt;/code&gt; menu.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;📄&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;File:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;keybindings.json&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;-----------------------------------&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Place&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;bindings&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;file&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;override&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;defaults&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Browser&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"alt+shift+b"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"workbench.action.tasks.runTask"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Simple Browser"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;


&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The next time you can open the simple browser by pressing &lt;code&gt;alt+shift+b&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  You don't need that extension 🚫
&lt;/h2&gt;

&lt;p&gt;By the way, you don't need an extension like &lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode.live-server" rel="noopener noreferrer"&gt;Live Preview&lt;/a&gt; (or any of the many others that exist) to achieve it. &lt;/p&gt;

&lt;p&gt;But if you prefer to have all the browser dev tools inside VSCode instead of using the Browser, then use the extension.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;That’s All Folks!&lt;br&gt;
Happy Coding&lt;/strong&gt; 🖖&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sponsors/deinsoftware?frequency=one-time&amp;amp;sponsor=equiman" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmkgsx4aw6qn9i9ax6as9.png" alt="beer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Sources&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a&gt;VS Code task to open VS Code's simple browser with a url&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

</description>
      <category>vscode</category>
      <category>productivity</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>VSCode - Wrap HTML elements</title>
      <dc:creator>Camilo Martinez</dc:creator>
      <pubDate>Fri, 17 Mar 2023 18:20:50 +0000</pubDate>
      <link>https://dev.to/equiman/vscode-wrap-html-elements-3gg0</link>
      <guid>https://dev.to/equiman/vscode-wrap-html-elements-3gg0</guid>
      <description>&lt;p&gt;One of the best hidden 💎 that I found on VSCode is the HTML wrapper combined with Emmet and together are pure gold. &lt;/p&gt;

&lt;p&gt;I can believe all the time I've lost doing the same manually when forgot/need to include a parent tag.&lt;/p&gt;

&lt;h2&gt;
  
  
  The hard way 👎
&lt;/h2&gt;

&lt;p&gt;Creating a new element and then move the content inside with &lt;code&gt;cut/paste&lt;/code&gt; or moving the lines with &lt;code&gt;alt+verticalArrows&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjw91muu06l8f28poq72n.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjw91muu06l8f28poq72n.gif" alt="Hard Way"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The good way 👍
&lt;/h2&gt;

&lt;p&gt;Using the "Emmet Wrapper" option through the "Command Palette" using &lt;code&gt;ctrl+shift+p&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F372c0tnrzrf3457mpwy8.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F372c0tnrzrf3457mpwy8.gif" alt="Easy Way"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The best way 🌟
&lt;/h2&gt;

&lt;p&gt;Adding a shortcut &lt;code&gt;alt+shift+w&lt;/code&gt; for the "Emmet Wrapper" option.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fykhmyui7ysup385iqqif.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fykhmyui7ysup385iqqif.gif" alt="Easiest"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You also can define the shortcut manually.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;📄&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;File:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;keybindings.json&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;-----------------------------------&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Place&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;bindings&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;file&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;override&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;defaults&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Emmet&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"alt+shift+w"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//wrap&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;emmet&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"editor.emmet.action.wrapWithAbbreviation"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"when"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"editorHasSelection"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;


&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  The Geek Way 🤓
&lt;/h2&gt;

&lt;p&gt;What if I tell you, that the whole process can be faster without using the mouse adding more useful shortcuts.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;📄&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;File:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;keybindings.json&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;-----------------------------------&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Place&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;bindings&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;file&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;override&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;defaults&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"alt+shift+j"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//expand&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;selection&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"editor.emmet.action.balanceOut"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"alt+shift+k"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//contact&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;selection&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"editor.emmet.action.balanceIn"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;


&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fclv3rsggj8jm3unka75l.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fclv3rsggj8jm3unka75l.gif" alt="Balance Shortcut"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Multicursor 😎
&lt;/h2&gt;

&lt;p&gt;But the magic does not end, this wrapper is also available for multicursor.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7rp71oqequwq1zjxjry0.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7rp71oqequwq1zjxjry0.gif" alt="Multicursor"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  You don't need that extension 🚫
&lt;/h2&gt;

&lt;p&gt;By the way, you don't need an extension like &lt;a href="https://marketplace.visualstudio.com/items?itemName=hwencc.html-tag-wrapper" rel="noopener noreferrer"&gt;html-tag-wrapper&lt;/a&gt; to achieve it.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;That’s All Folks!&lt;br&gt;
Happy Coding&lt;/strong&gt; 🖖&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sponsors/deinsoftware?frequency=one-time&amp;amp;sponsor=equiman" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmkgsx4aw6qn9i9ax6as9.png" alt="beer"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>productivity</category>
      <category>webdev</category>
      <category>html</category>
    </item>
    <item>
      <title>Sharing Git credentials between Windows and WSL</title>
      <dc:creator>Camilo Martinez</dc:creator>
      <pubDate>Tue, 07 Mar 2023 00:59:07 +0000</pubDate>
      <link>https://dev.to/equiman/sharing-git-credentials-between-windows-and-wsl-5a2a</link>
      <guid>https://dev.to/equiman/sharing-git-credentials-between-windows-and-wsl-5a2a</guid>
      <description>&lt;p&gt;Download &lt;a href="https://gitforwindows.org/" rel="noopener noreferrer"&gt;Git for Windows&lt;/a&gt; and choose &lt;a href="https://github.com/GitCredentialManager/git-credential-manager" rel="noopener noreferrer"&gt;Git Credential Manager&lt;/a&gt; (GCM) as credential helper on the installation steps.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0wvpleqjo4wwvzyk6k7f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0wvpleqjo4wwvzyk6k7f.png" alt="gcm" width="499" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you use HTTPS to clone your repositories, you can share this with WSL so that passwords you enter are persisted on both sides.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note that this does not apply to using SSH keys.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Just follow these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Configure the credential manager on Windows by running the following in a &lt;strong&gt;Windows command prompt&lt;/strong&gt; or &lt;strong&gt;PowerShell&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt; &lt;span class="kd"&gt;git&lt;/span&gt; &lt;span class="kd"&gt;config&lt;/span&gt; &lt;span class="na"&gt;--global &lt;/span&gt;&lt;span class="kd"&gt;credential&lt;/span&gt;.helper &lt;span class="kd"&gt;wincred&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Configure WSL to use the same credential helper, but running the following in a &lt;strong&gt;WSL terminal&lt;/strong&gt; (assuming you have &lt;code&gt;git&lt;/code&gt; &amp;gt;= &lt;code&gt;v2.39.0&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; git config &lt;span class="nt"&gt;--global&lt;/span&gt; credential.helper &lt;span class="s2"&gt;"/mnt/c/Program&lt;/span&gt;&lt;span class="se"&gt;\ &lt;/span&gt;&lt;span class="s2"&gt;Files/Git/mingw64/bin/git-credential-manager.exe"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;To know the path for previous versions of &lt;code&gt;git&lt;/code&gt;, please refer to &lt;a href="https://learn.microsoft.com/en-us/windows/wsl/tutorials/wsl-git" rel="noopener noreferrer"&gt;https://learn.microsoft.com/en-us/windows/wsl/tutorials/wsl-git&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Any password you enter when working with Git on the Windows side will now be available to WSL and vice versa.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bonus Track
&lt;/h2&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/equiman" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F60846%2Fa7b57cd0-916f-408e-ad8e-86c03c941327.jpg" alt="equiman"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/equiman/how-to-use-multiple-users-with-git-2e9l" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;How to use multiple users with Git&lt;/h2&gt;
      &lt;h3&gt;Camilo Martinez ・ Oct 14 '22&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#git&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#github&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#productivity&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;





&lt;p&gt;&lt;strong&gt;That’s All Folks!&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Happy Coding&lt;/strong&gt; 🖖&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sponsors/deinsoftware" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmkgsx4aw6qn9i9ax6as9.png" alt="beer" width="360" height="86"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Sources&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/microsoft/vscode-docs/blob/vnext/docs/remote/troubleshooting.md#sharing-git-credentials-between-windows-and-wsl" rel="noopener noreferrer"&gt;vscode docs troubleshooting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/windows/wsl/tutorials/wsl-git" rel="noopener noreferrer"&gt;Get started using Git on Windows Subsystem for Linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/git-ecosystem/git-credential-manager/blob/main/docs/rename.md" rel="noopener noreferrer"&gt;Git Credential Manager Rename&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

</description>
      <category>zsh</category>
      <category>git</category>
      <category>terminal</category>
      <category>wsl</category>
    </item>
    <item>
      <title>Why Oh My ZSH is so cool?</title>
      <dc:creator>Camilo Martinez</dc:creator>
      <pubDate>Sat, 04 Mar 2023 00:37:11 +0000</pubDate>
      <link>https://dev.to/equiman/why-oh-my-zsh-is-so-cool-31gd</link>
      <guid>https://dev.to/equiman/why-oh-my-zsh-is-so-cool-31gd</guid>
      <description>&lt;p&gt;There is a before and after listening to these letters together: &lt;a href="https://zsh.sourceforge.io/" rel="noopener noreferrer"&gt;ZSH&lt;/a&gt;. You may wonder: Why did not I hear about this before? D'oh!&lt;/p&gt;

&lt;p&gt;ZSH (Z Shell) it's a real evolution, modernize terminal things with simple solutions. But the thing getting better when you discover &lt;a href="https://ohmyz.sh/" rel="noopener noreferrer"&gt;Oh My ZSH!&lt;/a&gt; a framework for ZSH that boost your productivity and improve your workflow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhyh668g5cq84dln9myiw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhyh668g5cq84dln9myiw.png" alt="cool bro" width="552" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  So, why?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;No more &lt;code&gt;cd&lt;/code&gt; (change directory) command. Just use:&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;folder/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;write the folder name with &lt;code&gt;/&lt;/code&gt; at the end&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;..&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;go back one folder (parent dir)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;...&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;go back two folders (parent from parent dir)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;......&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;go back five folders&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;go to root&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;~&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;go to home&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;jump to previous path&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Recursive path expansion. &lt;code&gt;/u/lo/b&lt;/code&gt; expands to &lt;code&gt;/user/local/bin&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Spelling correction and approximate completion, automatic correct when having minor mistake typing a directory name&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;take&lt;/code&gt; the 3 in 1 command who create a directory and automatically change the path to it&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;take &amp;lt;url_file&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Download gzip file (&lt;code&gt;.gz&lt;/code&gt;, &lt;code&gt;.bz2&lt;/code&gt;, &lt;code&gt;.xz&lt;/code&gt;) and uncompress&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;take &amp;lt;git_repo&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Clone git repo from url (&lt;code&gt;http&lt;/code&gt;, &lt;code&gt;ssh&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;take &amp;lt;folder&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Create a new folder&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;zsh_stats&lt;/code&gt; will give you a list of the top 20 commands and how many times they've been run&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tab completion is another great feature. For example, typing &lt;code&gt;ls -&lt;/code&gt; and pressing &lt;code&gt;TAB&lt;/code&gt; will list all of the command's options, along with a helpful description of what they do&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Alias commands. List all with &lt;code&gt;alias&lt;/code&gt; or filter it with &lt;code&gt;grep&lt;/code&gt; for example &lt;code&gt;alias | grep git&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Globbing&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ls *.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;list all &lt;code&gt;txt&lt;/code&gt; files in the current directory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ls **/*.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;list all &lt;code&gt;txt&lt;/code&gt; files including subdirectories&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ls **/(READ)*.*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;find for files that start with the word &lt;code&gt;READ&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ls **/*(READ).*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;find for files that end with the word &lt;code&gt;READ&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ls **/*(READ)*.*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;find for files that have the word &lt;code&gt;READ&lt;/code&gt; anywhere&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ls **/*(.)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;search for files only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ls **/*(/)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;search for folders only&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Expanding File Names and Directories&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;touch name-{1..4}.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;create files &lt;code&gt;name-1.txt&lt;/code&gt;, &lt;code&gt;name-2.txt&lt;/code&gt;, &lt;code&gt;name-3.txt&lt;/code&gt;, &lt;code&gt;name-4.txt&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;touch name.{css,js,test.js}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;create files with different extension &lt;code&gt;name.css&lt;/code&gt;, &lt;code&gt;name.js&lt;/code&gt;, &lt;code&gt;name.test.js&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cp folder/name.js{,.bak}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;create a copy of the file ending &lt;code&gt;.bak&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;diff folder/{new,old}/name.js&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;view differences between two files&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mkdir -p {source,build,man,help{/pages,/yelp,/images}}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;create a complete folder structure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wget http://site.com/folder{1,2}/pic{001,002}.jpg&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;download multiple files&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Expand environment variables &lt;code&gt;$ENV&lt;/code&gt; followed by &lt;code&gt;TAB&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Expand &lt;code&gt;kill&lt;/code&gt; command followed by &lt;code&gt;TAB&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;History substring search writing a command and pressing the up arrow cycles through previous usages&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Autocomplete, jump between options with tab, and press return for selection. Works with directories, files, and commands&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Run history command with &lt;code&gt;!&lt;/code&gt; followed by the number in history, like &lt;code&gt;!137&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Entering &lt;code&gt;!!&lt;/code&gt; will bring up the last command. This is handy if a command fails because it needs admin rights. In this case you can type &lt;code&gt;sudo !!&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Plugins
&lt;/h2&gt;

&lt;p&gt;There are &lt;a href="https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins" rel="noopener noreferrer"&gt;a lot of plugins&lt;/a&gt; to use. It's recommended to explore the options and use what is good for your needs.&lt;/p&gt;

&lt;p&gt;My recommendations are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/sudo" rel="noopener noreferrer"&gt;sudo&lt;/a&gt; to easily prefix your current or previous commands with sudo by pressing esc twice&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/command-not-found" rel="noopener noreferrer"&gt;command-not-found&lt;/a&gt; to provide suggested packages to be installed if a command cannot be found&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/ohmyzsh/ohmyzsh/blob/master/plugins/extract" rel="noopener noreferrer"&gt;extract&lt;/a&gt; that extracts the archive file you pass it, and it supports a wide variety of archive filetypes&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/git" rel="noopener noreferrer"&gt;git&lt;/a&gt; provides many aliases and a few useful functions&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/history-substring-search" rel="noopener noreferrer"&gt;history-substring-search&lt;/a&gt; a clean-room implementation of the Fish shell's history search feature, where you can type in any part of any command from history and then press chosen keys, such as the UP and DOWN arrows, to cycle through matches&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/web-search" rel="noopener noreferrer"&gt;web-search&lt;/a&gt; adds aliases for searching with Google, Wiki, Bing, YouTube and other popular services&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/z" rel="noopener noreferrer"&gt;z&lt;/a&gt; command that tracks your most visited directories and allows you to access them with very few keystrokes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I've another extra from plugins from external repositories to add more functionalities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/zsh-users/zsh-autosuggestions.git" rel="noopener noreferrer"&gt;autosuggestions&lt;/a&gt; suggests commands as you type based on history and completions.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/zsh-users/zsh-syntax-highlighting.git" rel="noopener noreferrer"&gt;syntax-highlighting&lt;/a&gt; Fish shell-like syntax highlighting for ZSH&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/Pilaton/OhMyZsh-full-autoupdate" rel="noopener noreferrer"&gt;ohmyzsh-full-autoupdate&lt;/a&gt; Automatic update of custom plugins and themes Oh My Zsh&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Themes
&lt;/h2&gt;

&lt;p&gt;There are also &lt;a href="https://github.com/ohmyzsh/ohmyzsh/wiki/Themes" rel="noopener noreferrer"&gt;a lot of themes&lt;/a&gt;, but my favorite is &lt;a href="https://github.com/romkatv/powerlevel10k" rel="noopener noreferrer"&gt;Powerlevel10k&lt;/a&gt; because is easy to set up and use&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkm2jmrlk34k891qdfvbu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkm2jmrlk34k891qdfvbu.png" alt="p10k" width="800" height="689"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Git
&lt;/h2&gt;

&lt;p&gt;Incredible and complete aliases for Git&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/equiman" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F60846%2Fa7b57cd0-916f-408e-ad8e-86c03c941327.jpg" alt="equiman"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/equiman/zsh-cheatsheet-for-git-plugin-1f6a" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;ZSH cheatsheet for git plugin&lt;/h2&gt;
      &lt;h3&gt;Camilo Martinez ・ Apr 20 '21&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#productivity&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#zsh&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#git&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#terminal&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;Git Status Prompt can contain the following bits:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;segment&lt;/th&gt;
&lt;th&gt;meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;master&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;current branch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;#v1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;HEAD is tagged with &lt;code&gt;v1&lt;/code&gt;; not shown when on a branch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@5fc6fca4&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;current commit; not shown when on a branch or tag&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;⇣1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;local branch is behind the remote by 1 commit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;⇡2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;local branch is ahead of the remote by 2 commits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;⇠3&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;local branch is behind the push remote by 3 commits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;⇢4&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;local branch is ahead of the push remote by 4 commits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;*5&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;there are 5 stashes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;merge&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;merge is in progress (could be some other action)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;~6&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;there are 6 merge conflicts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+7&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;there are 7 staged changes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;!8&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;there are 8 unstaged changes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;?9&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;there are 9 untracked files&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Shortcuts
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Edit long command
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;ctrl+x+e&lt;/code&gt; open the command on an editor to easy edit, once save and close the editor it will be updated on the terminal&lt;/p&gt;

&lt;p&gt;You can set your favorite editor, for example run &lt;code&gt;export EDITOR="code -w"&lt;/code&gt; to use VSCode&lt;/p&gt;

&lt;h3&gt;
  
  
  Park a command
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;ctrl+q&lt;/code&gt; "parks" the command you're currently typing and takes you back to the prompt, letting you start over and type another command. Once you run that other command, the original command is un-parked and refills the command line so you can continue.&lt;/p&gt;

&lt;p&gt;This is good for if you, say, forgot to do a command before a command.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reveal alias
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;ctrl+x&lt;/code&gt; &lt;code&gt;a&lt;/code&gt; will transform the alias to the real command&lt;/p&gt;

&lt;h3&gt;
  
  
  Path history
&lt;/h3&gt;

&lt;p&gt;ZSH keeps the history of directories you visited so you can quickly switch to any of them.&lt;/p&gt;

&lt;p&gt;To see the list, type &lt;code&gt;dirs -v&lt;/code&gt;. Switch to any directory in this list by typing &lt;code&gt;~#&lt;/code&gt; where &lt;code&gt;#&lt;/code&gt; is the number of the directory in the list.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hooks
&lt;/h2&gt;

&lt;p&gt;You can personalize actions (before and after a command) with ZSH Hooks&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/equiman" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F60846%2Fa7b57cd0-916f-408e-ad8e-86c03c941327.jpg" alt="equiman"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/equiman/reveal-the-command-behind-an-alias-with-zsh-4d96" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Reveal the command behind an alias with ZSH&lt;/h2&gt;
      &lt;h3&gt;Camilo Martinez ・ Feb 22 '21&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#productivity&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#bash&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#tutorial&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#terminal&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;



&lt;div class="ltag__link"&gt;
  &lt;a href="/equiman" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F60846%2Fa7b57cd0-916f-408e-ad8e-86c03c941327.jpg" alt="equiman"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/equiman/command-validations-with-zsh-2boa" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Command validations with ZSH&lt;/h2&gt;
      &lt;h3&gt;Camilo Martinez ・ Mar 8 '21&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#productivity&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#zsh&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#tutorial&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#terminal&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;





&lt;p&gt;&lt;strong&gt;That's All Folks!&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Happy Coding&lt;/strong&gt; 🖖&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sponsors/deinsoftware" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmkgsx4aw6qn9i9ax6as9.png" alt="beer" width="360" height="86"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Sources&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://linuxconfig.org/learn-the-basics-of-the-zsh-shell" rel="noopener noreferrer"&gt;Learn the basics of the ZSH shell&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thevaluable.dev/zsh-expansion-guide-example/" rel="noopener noreferrer"&gt;A Guide to Zsh Expansion with Examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.howtogeek.com/725657/how-to-use-brace-expansion-in-linuxs-bash-shell/" rel="noopener noreferrer"&gt;How to Use Brace Expansion in Linux's Bash Shell&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.sitepoint.com/zsh-commands-plugins-aliases-tools/" rel="noopener noreferrer"&gt;75 Zsh Commands, Plugins, Aliases and Tools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dmitry-antonyuk.medium.com/zsh-globbing-as-an-alternative-to-find-command-2ebf9da5cffe" rel="noopener noreferrer"&gt;ZSH Globbing as an Alternative to Find Command&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://opensource.com/article/18/9/tips-productivity-zsh" rel="noopener noreferrer"&gt;https://opensource.com/article/18/9/tips-productivity-zsh&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

</description>
      <category>vercel</category>
      <category>softwaredevelopment</category>
      <category>discuss</category>
    </item>
    <item>
      <title>WSL Tepes: The CPU/Memory vampire</title>
      <dc:creator>Camilo Martinez</dc:creator>
      <pubDate>Fri, 03 Mar 2023 20:33:28 +0000</pubDate>
      <link>https://dev.to/equiman/wsl-tepes-the-cpumemory-vampire-232f</link>
      <guid>https://dev.to/equiman/wsl-tepes-the-cpumemory-vampire-232f</guid>
      <description>&lt;p&gt;Surely, you have ever seen the &lt;strong&gt;Chrome&lt;/strong&gt; and &lt;strong&gt;Android Studio&lt;/strong&gt; memes about the huge consumption of ram and CPU. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F32bog0qn3osdfjbbmvu0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F32bog0qn3osdfjbbmvu0.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Well... I think we have a new contender for the crown.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The King is dead, hail the new king. &lt;br&gt;
Your majesty: &lt;strong&gt;WSL!&lt;/strong&gt; 👑&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is because have a &lt;a href="https://github.com/microsoft/WSL/issues/4166" rel="noopener noreferrer"&gt;known issue&lt;/a&gt; &lt;em&gt;"WSL 2 consumes massive amounts of RAM and doesn't return it"&lt;/em&gt; and can't be solved until today.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fttfr3xo12goumqmt5c4k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fttfr3xo12goumqmt5c4k.png" alt="not cool"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Solution
&lt;/h2&gt;

&lt;p&gt;It is not a definitive solution, but we can setup WSL with some &lt;a href="https://learn.microsoft.com/en-us/windows/wsl/wsl-config#example-wslconfig-file" rel="noopener noreferrer"&gt;advanced configurations&lt;/a&gt; to limit his resources. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;All next steep need to be done on PowerShell (Windows side).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;First, we need to close all terminals that are using WSL, and then shut it down to avoid data corruption running the &lt;code&gt;wsl --shutdown&lt;/code&gt; command.&lt;/p&gt;

&lt;p&gt;Create a &lt;code&gt;.wslconfig&lt;/code&gt; file under the windows user profile path.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="c"&gt;# PowerShell&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="nv"&gt;$env&lt;/span&gt;:USERPROFILE
New-Item &lt;span class="nt"&gt;-Path&lt;/span&gt; &lt;span class="s1"&gt;'.wslconfig'&lt;/span&gt; &lt;span class="nt"&gt;-ItemType&lt;/span&gt; File


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Open this file with VSCode (or any editor that you like)&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="c"&gt;# PowerShell&lt;/span&gt;
code .wslconfig


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;And set limits for the max amount of resources that can take (according to you needs). For example:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="c"&gt;# Settings apply across all Linux distros running on WSL 2&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;wsl2]

&lt;span class="c"&gt;# Limits VM memory to use no more than 4 GB, this can be set as whole numbers using GB or MB&lt;/span&gt;
&lt;span class="nv"&gt;memory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;4GB 

&lt;span class="c"&gt;# Sets the VM to use two virtual processors&lt;/span&gt;
&lt;span class="nv"&gt;processors&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;2

&lt;span class="c"&gt;# Sets amount of swap storage space to 8GB, default is 25% of available RAM&lt;/span&gt;
&lt;span class="nv"&gt;swap&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;8GB

&lt;span class="c"&gt;# Sets swapfile path location, default is %USERPROFILE%\AppData\Local\Temp\swap.vhdx&lt;/span&gt;
&lt;span class="nv"&gt;swapfile&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;D:&lt;span class="se"&gt;\\&lt;/span&gt;WSL&lt;span class="se"&gt;\\&lt;/span&gt;wsl-swap.vhdx

&lt;span class="c"&gt;# Turn off default connection to bind WSL 2 localhost to Windows localhost&lt;/span&gt;
&lt;span class="nv"&gt;localhostforwarding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;For more &lt;a href="https://learn.microsoft.com/en-us/windows/wsl/wsl-config" rel="noopener noreferrer"&gt;WSL advanced configuration&lt;/a&gt; check the documentation.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Save the file and restart WSL running &lt;code&gt;wsl&lt;/code&gt; command.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fth852a0ik31lwe9ky82r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fth852a0ik31lwe9ky82r.png" alt="htop"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It will still consume the entire 4GBs regardless of Linux memory usage and only 2 virtual processors, but at least it will stop growing more than that.&lt;/p&gt;
&lt;h2&gt;
  
  
  Experimental
&lt;/h2&gt;

&lt;p&gt;There is a new experimental version of WSL whit better managment of memory.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;All next steps need to be done on PowerShell (Windows side).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Backup
&lt;/h3&gt;

&lt;p&gt;First, we need to close all terminals that are using WSL, and then shut it down to avoid data corruption running the command.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="c"&gt;# PowerShell&lt;/span&gt;
wsl &lt;span class="nt"&gt;--shutdown&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Next, we are going to create a backup from our &lt;code&gt;Ubuntu&lt;/code&gt; linux distribution.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="c"&gt;# PowerShell&lt;/span&gt;
&lt;span class="nb"&gt;mkdir &lt;/span&gt;D:&lt;span class="se"&gt;\b&lt;/span&gt;ackup
wsl &lt;span class="nt"&gt;--export&lt;/span&gt; Ubuntu D:&lt;span class="se"&gt;\b&lt;/span&gt;ackup&lt;span class="se"&gt;\u&lt;/span&gt;buntu.tar


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Don't worry if you do not see progress indicators. This can take a while depending on how much data you have. Maybe it's a good idea to take a rest.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Finlo80w5ccpkaxjcnv4d.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Finlo80w5ccpkaxjcnv4d.gif" alt="waiting"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When finished, first of all, and more important &lt;strong&gt;ensure&lt;/strong&gt; that the &lt;code&gt;D:\backup\ubuntu.tar&lt;/code&gt;file exists.&lt;/p&gt;
&lt;h3&gt;
  
  
  Update
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ Beware that everything that was stored on the WSL drive can be lost, and the command won't ask for a confirmation, so make sure you backup everything you need first!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="c"&gt;# PowerShell&lt;/span&gt;
wsl &lt;span class="nt"&gt;--update&lt;/span&gt;
wsl &lt;span class="nt"&gt;--update&lt;/span&gt; &lt;span class="nt"&gt;--pre-release&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Config
&lt;/h3&gt;

&lt;p&gt;Open again the &lt;code&gt;.wslconfig&lt;/code&gt; file with VSCode (or any editor that you like)&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="c"&gt;# PowerShell&lt;/span&gt;
code .wslconfig


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;And set the experimental flags (according to you needs). For example:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="o"&gt;[&lt;/span&gt;experimental]

&lt;span class="c"&gt;# Automatic memory reclaim&lt;/span&gt;
&lt;span class="nv"&gt;autoMemoryReclaim&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;gradual

&lt;span class="c"&gt;# Automatic disk space clean up&lt;/span&gt;
&lt;span class="nv"&gt;sparseVhd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;And finally restart WSL with &lt;code&gt;wsl&lt;/code&gt; or &lt;code&gt;wsl --distribution &amp;lt;DistroName&amp;gt;&lt;/code&gt; command.&lt;/p&gt;


&lt;h2&gt;
  
  
  Alternative
&lt;/h2&gt;

&lt;p&gt;If you are still having issues with WSL, you can use Git Bash. It's not a "real" Linux distribution like WSL, but it's a good alternative to emulate an &lt;em&gt;Unixish&lt;/em&gt; environment inside windows.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/equiman" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F60846%2Fa7b57cd0-916f-408e-ad8e-86c03c941327.jpg" alt="equiman"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/equiman/zsh-on-windows-without-wsl-4ah9" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;ZSH + Oh My ZSH! on Windows without WSL&lt;/h2&gt;
      &lt;h3&gt;Camilo Martinez ・ Oct 11 '22&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#productivity&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#zsh&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#git&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#terminal&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;






&lt;p&gt;&lt;strong&gt;That’s All Folks!&lt;br&gt;
Happy Coding&lt;/strong&gt; 🖖&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sponsors/deinsoftware" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmkgsx4aw6qn9i9ax6as9.png" alt="beer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Sources&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://devblogs.microsoft.com/commandline/windows-subsystem-for-linux-september-2023-update/" rel="noopener noreferrer"&gt;Windows Subsystem for Linux September 2023 update&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

</description>
      <category>terminal</category>
      <category>wsl</category>
      <category>linux</category>
      <category>ubuntu</category>
    </item>
    <item>
      <title>ZSH + Oh My ZSH! on Windows with WSL</title>
      <dc:creator>Camilo Martinez</dc:creator>
      <pubDate>Fri, 03 Mar 2023 08:14:00 +0000</pubDate>
      <link>https://dev.to/equiman/zsh-on-windows-with-wsl-1jck</link>
      <guid>https://dev.to/equiman/zsh-on-windows-with-wsl-1jck</guid>
      <description>&lt;h2&gt;
  
  
  1. Install WSL
&lt;/h2&gt;

&lt;p&gt;There are plenty of good articles about how to &lt;a href="https://learn.microsoft.com/en-us/windows/wsl/install" rel="noopener noreferrer"&gt;install WSL&lt;/a&gt; so I'm not going to detail about this step.&lt;/p&gt;

&lt;p&gt;The easy way, install &lt;a href="https://apps.microsoft.com/store/detail/ubuntu/9PDXGNCFSCZV" rel="noopener noreferrer"&gt;Ubuntu from the Microsoft Store&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Ubuntu
&lt;/h2&gt;

&lt;p&gt;Search the Ubuntu icon on the start menu and open the terminal (you can also use &lt;a href="https://apps.microsoft.com/store/detail/windows-terminal/9N0DX20HK701" rel="noopener noreferrer"&gt;Windows Terminal&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Update the package source list and updates all the packages presently installed, with this command.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

sudo apt update &amp;amp;&amp;amp; sudo apt upgrade


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This can take a while depending on how many packages going to need to be updated. Maybe it's a good idea to take a rest.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Finlo80w5ccpkaxjcnv4d.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Finlo80w5ccpkaxjcnv4d.gif" alt="waiting"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. ZSH
&lt;/h2&gt;

&lt;p&gt;Bash is the default Ubuntu shell, but ZSH is in another league with his productivity boosts. So, we are going to install ZSH over Bash.&lt;/p&gt;

&lt;h3&gt;
  
  
  Install
&lt;/h3&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

sudo apt install zsh


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Verify the installed version.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

zsh &lt;span class="nt"&gt;--version&lt;/span&gt;
zsh 5.8.1 &lt;span class="o"&gt;(&lt;/span&gt;x86_64-ubuntu-linux-gnu&lt;span class="o"&gt;)&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Close and reopen the terminal, to update those changes. &lt;/p&gt;

&lt;h2&gt;
  
  
  4. Oh my zsh!
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Install
&lt;/h3&gt;

&lt;p&gt;Add superpowers to &lt;code&gt;zsh&lt;/code&gt; installing &lt;strong&gt;Oh my zsh!&lt;/strong&gt; running this command.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

sh &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Default
&lt;/h3&gt;

&lt;p&gt;Answer &lt;code&gt;y&lt;/code&gt; to change the default shell.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

Time to change your default shell to zsh:
Do you want to change your default shell to zsh? [Y/n] y


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Fonts
&lt;/h3&gt;

&lt;p&gt;Download and install manually the &lt;a href="https://github.com/romkatv/powerlevel10k#meslo-nerd-font-patched-for-powerlevel10k" rel="noopener noreferrer"&gt;Meslo Nerd Fonts&lt;/a&gt; to include all glyphs and symbols that Powerlevel10k may need&lt;/p&gt;

&lt;p&gt;Copy the &lt;code&gt;.ttf&lt;/code&gt; files inside &lt;code&gt;~/.fonts&lt;/code&gt; folder. Create one if you don't already have one.&lt;/p&gt;

&lt;p&gt;And run these commands:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

sudo apt install fontconfig
fc-cache -fv


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Theme
&lt;/h3&gt;

&lt;p&gt;There are a lot of themes but my favorite is &lt;a href="https://github.com/romkatv/powerlevel10k" rel="noopener noreferrer"&gt;Powerlevel10k&lt;/a&gt; because is easy to set up and use.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

git clone https://github.com/romkatv/powerlevel10k.git &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ZSH_CUSTOM&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="p"&gt;~/.oh-my-zsh/custom&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/themes/powerlevel10k


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;On the &lt;code&gt;~/.zshrc&lt;/code&gt; file add this additional configuration&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nv"&gt;ZSH_THEME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"powerlevel10k/powerlevel10k"&lt;/span&gt;
&lt;span class="nv"&gt;POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;&lt;span class="nb"&gt;history&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;POWERLEVEL9K_SHORTEN_DIR_LENGTH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1

&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;LS_COLORS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"rs=0:no=00:mi=00:mh=00:ln=01;36:or=01;31:di=01;34:ow=04;01;34:st=34:tw=04;34:pi=01;33:so=01;33:do=01;33:bd=01;33:cd=01;33:su=01;35:sg=01;35:ca=01;35:ex=01;32:"&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Restart the terminal and type &lt;code&gt;p10k configure&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmtrv39dhe0f0b5pe2shs.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmtrv39dhe0f0b5pe2shs.gif" alt="Wizard"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Plugins
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Oh My zsh!&lt;/strong&gt; have &lt;a href="https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins" rel="noopener noreferrer"&gt;a lot of plugins&lt;/a&gt; to use. It's recommended to explore the options and use what is good for your needs.&lt;/p&gt;

&lt;p&gt;I've already installed a lot related to software development and other ones to add more functionalities. Running these commands:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

git clone https://github.com/zsh-users/zsh-autosuggestions.git &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ZSH_CUSTOM&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="p"&gt;~/.oh-my-zsh/custom&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ZSH_CUSTOM&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="p"&gt;~/.oh-my-zsh/custom&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/plugins/zsh-syntax-highlighting
git clone https://github.com/Pilaton/OhMyZsh-full-autoupdate.git &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ZSH_CUSTOM&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="p"&gt;~/.oh-my-zsh/custom&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/plugins/ohmyzsh-full-autoupdate


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;And now edit the &lt;code&gt;~/.zshrc&lt;/code&gt; file and add it inside the &lt;code&gt;plugins&lt;/code&gt; property (don't use commas as separators)&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nv"&gt;ZSH_HIGHLIGHT_HIGHLIGHTERS&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;main brackets pattern cursor root line&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;ZSH_HIGHLIGHT_PATTERNS&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;&lt;span class="s1"&gt;'rm -rf *'&lt;/span&gt; &lt;span class="s1"&gt;'fg=white,bold,bg=red'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="nv"&gt;plugins&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;
    adb
    command-not-found
    extract
    deno
    docker
    git
    github
    gitignore
    history-substring-search
    node
    npm
    nvm
    yarn
    volta
    vscode
    &lt;span class="nb"&gt;sudo
    &lt;/span&gt;web-search
    z
    zsh-autosuggestions
    zsh-syntax-highlighting
    ohmyzsh-full-autoupdate
&lt;span class="o"&gt;)&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;If you are using NVM take care of following this &lt;a href="https://lakur.tech/2021/12/10/fix-slow-zsh-startup-nvm/" rel="noopener noreferrer"&gt;configuration to avoid slowing the zsh start-up&lt;/a&gt; and this &lt;a href="https://gist.github.com/ctechols/ca1035271ad134841284?permalink_comment_id=3365691" rel="noopener noreferrer"&gt;configuration to speed up the compinit&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;⚠ If you have done previous package configurations, alias definitions, or something else on your &lt;code&gt;~/.basrc&lt;/code&gt; previous ZSH installation you need to move those manually to &lt;code&gt;~/.zshrc&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Terminals
&lt;/h2&gt;

&lt;p&gt;To use the same terminal inside VSCode and Windows Terminal follow these configurations.&lt;/p&gt;

&lt;h3&gt;
  
  
  VS Code
&lt;/h3&gt;

&lt;p&gt;Add these properties to the user &lt;code&gt;setttings.json&lt;/code&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;{ 
    ...
&lt;span class="gi"&gt;+   "terminal.integrated.fontFamily": "MesloLGS NF",
+   "terminal.integrated.fontSize": 12,
+   "terminal.integrated.shellIntegration.enabled": true,
+   "terminal.integrated.defaultProfile.windows": "Git Bash",
+   "terminal.integrated.defaultProfile.linux": "zsh",
&lt;/span&gt;    ...
}
&lt;span class="err"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Microsoft Terminal
&lt;/h3&gt;

&lt;p&gt;Add these configurations to the Ubuntu terminal.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;{
    "profiles": {
        "defaults": {},
        "list": [
                "colorScheme": "Ubuntu-ColorScheme",
                "cursorShape": "filledBox",
&lt;span class="gi"&gt;+               "font": {
+                   "face": "MesloLGS NF",
+                   "size": 10
+               },
&lt;/span&gt;                "guid": "{57ff1822-68a9-4a3f-90c5-a55c8557df50}",
                "hidden": false,
                "icon": "https://assets.ubuntu.com/v1/49a1a858-favicon-32x32.png",
                "name": "Ubuntu",
&lt;span class="gi"&gt;+               "commandline": "wsl",
+               "startingDirectory": "~/Developer"
&lt;/span&gt;            },
        ]
    }
}
&lt;span class="err"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;p&gt;&lt;strong&gt;That’s All Folks!&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Happy Coding&lt;/strong&gt; 🖖&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sponsors/deinsoftware" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmkgsx4aw6qn9i9ax6as9.png" alt="beer"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>zsh</category>
      <category>git</category>
      <category>terminal</category>
    </item>
    <item>
      <title>Usar múltiples usuarios con Git</title>
      <dc:creator>Camilo Martinez</dc:creator>
      <pubDate>Wed, 19 Oct 2022 22:42:30 +0000</pubDate>
      <link>https://dev.to/equimancho/usar-multiples-usuarios-con-git-1fci</link>
      <guid>https://dev.to/equimancho/usar-multiples-usuarios-con-git-1fci</guid>
      <description>&lt;p&gt;Idiomas: [🇺🇸] &lt;a href="https://dev.to/equiman/how-to-use-multiple-users-with-git-2e9l"&gt;English&lt;/a&gt; - [🇪🇸] &lt;a href="https://dev.to/equimancho/usar-multiples-usuarios-con-git-1fci"&gt;Español&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Si estás trabajando con múltiples usuarios de Git, por ejemplo, con uno para proyectos personales y otro para los proyectos del trabajo.&lt;/p&gt;

&lt;p&gt;Entonces &lt;strong&gt;no es buena idea definir un usuario global&lt;/strong&gt; porque todos los proyectos van a usar el mismo y puede ser muy fácil terminar haciendo un &lt;code&gt;commit&lt;/code&gt; con el usuario incorrecto.&lt;/p&gt;

&lt;h2&gt;
  
  
  Amend
&lt;/h2&gt;

&lt;p&gt;Si ese es tu caso, no te preocupes. No es realmente un problema porque se puede enmendar (ammend) con este comando.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

git commit --author="First Last &amp;lt;first.last@company.org&amp;gt;" --amend --no-edit 


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Pero seamos sinceros, ¿quién quiere estar ejecutando este comando frecuentemente?. Seguramente casi nadie. Es una de esas cosas que solo queremos tener en cuenta en casos de emergencia.&lt;/p&gt;




&lt;h2&gt;
  
  
  Configuración de Git
&lt;/h2&gt;

&lt;p&gt;Lo primero que me gusta hacer es cambiar el editor por defecto de git de &lt;code&gt;vim&lt;/code&gt; a &lt;code&gt;VSCode&lt;/code&gt;. Aunque es algo opcional, si te sientes bien editando directamente desde la terminal.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

git config &lt;span class="nt"&gt;--global&lt;/span&gt; core.editor &lt;span class="s1"&gt;'code --wait'&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Y lo otro es crear dos alias, para acceder y editar fácilmente las configuraciones.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gcg&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git config --edit --global"&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gcl&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git config --edit --local"&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;La diferencia entre ellas es que &lt;code&gt;global&lt;/code&gt; aplica para todos los proyectos de Git en tu máquina y &lt;code&gt;local&lt;/code&gt; solo aplica al proyecto en la ruta actual.&lt;/p&gt;




&lt;p&gt;Ahora vamos a aprender como usar diferentes usuarios en cada proyecto. &lt;/p&gt;

&lt;h2&gt;
  
  
  Remover el Global 👌
&lt;/h2&gt;

&lt;p&gt;Este paso es recomendado, pero también es opcional. En mi caso prefiero no tener un usuario por defecto para todos los proyectos.&lt;/p&gt;

&lt;p&gt;Vamos a abrir la configuración &lt;code&gt;global&lt;/code&gt; utilizando el alias &lt;code&gt;gcg&lt;/code&gt; o con el comando &lt;code&gt;git config --edit --global&lt;/code&gt; y eliminar todas las configuraciones que tengan que ver con &lt;code&gt;[credential]&lt;/code&gt; y &lt;code&gt;[user]&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  La complicada 👎
&lt;/h2&gt;

&lt;p&gt;Una forma es que después de crear o clonar un repositorio, definas manualmente la configuración con estos comandos.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

git config user.name &lt;span class="s2"&gt;"&amp;lt;user&amp;gt;"&lt;/span&gt;
git config user.email &lt;span class="s2"&gt;"&amp;lt;user@mail.com&amp;gt;"&lt;/span&gt;
git config credential.username &lt;span class="s2"&gt;"&amp;lt;user&amp;gt;"&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Puede ser buena idea si no tienes una ruta específica para crear o clonar tus proyectos, pero... toma muchísimo tiempo y es muy fácil de olvidar, créeme, además vas a necesitar &lt;strong&gt;repetir lo mismo&lt;/strong&gt; con cada repositorio que clones.&lt;/p&gt;

&lt;h2&gt;
  
  
  La recomendada 👍
&lt;/h2&gt;

&lt;p&gt;Lo primero es definir una ruta específica para diferenciar nuestros proyectos y crear un archivo &lt;code&gt;.gitconfig&lt;/code&gt; para cada &lt;strong&gt;perfil de usuario&lt;/strong&gt;, tantos como sean necesarios.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

~
├── .gitconfig &amp;lt;&lt;span class="nt"&gt;--&lt;/span&gt; global
└── Developer/
   ├── personal/
   │   ├── proyecto_1/
   │   ├── proyecto_2/
   │   ├── proyecto_#/
   │   └── .gitconfig &amp;lt;&lt;span class="nt"&gt;--&lt;/span&gt; personal
   └── empresa/
       ├── proyecto_1/
       ├── proyecto_2/
       ├── proyecto_#/
       └── .gitconfig &amp;lt;&lt;span class="nt"&gt;--&lt;/span&gt; empresa


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Personal
&lt;/h3&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;

&lt;span class="c1"&gt;# ~/Developer/personal/.gitconfig&lt;/span&gt;

&lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;credential&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="s"&gt;username = &amp;lt;usuario-github&amp;gt;&lt;/span&gt;
&lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;user&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="s"&gt;name = &amp;lt;usuario-github&amp;gt;&lt;/span&gt;
    &lt;span class="s"&gt;email = &amp;lt;usuario-github&amp;gt;@users.noreply.github.com&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Empresa
&lt;/h3&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;

&lt;span class="c1"&gt;# ~/Developer/company/.gitconfig&lt;/span&gt;

&lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;credential&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="s"&gt;username = &amp;lt;user&amp;gt;&lt;/span&gt;
&lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;user&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="s"&gt;name = &amp;lt;Nombre Apellido&amp;gt;&lt;/span&gt;
    &lt;span class="s"&gt;email = &amp;lt;usuario&amp;gt;@empresa.org&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Global
&lt;/h3&gt;

&lt;p&gt;Ahora vamos a abrir la configuración &lt;code&gt;global&lt;/code&gt; usando el alias &lt;code&gt;gcg&lt;/code&gt; o el comando &lt;code&gt;git config --edit --global&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;

&lt;span class="c1"&gt;# ~/.gitconfig&lt;/span&gt;

&lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;includeIf "gitdir/i&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;~/Developer/personal/"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="s"&gt;path = ~/Developer/personal/.gitconfig&lt;/span&gt;

&lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;includeIf "gitdir/i&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;~/Developer/empresa/"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="s"&gt;path = ~/Developer/empresa/.gitconfig&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Así, tomará la configuración del usuario de cada "perfil" dependiendo de la ruta y podrás crear o clonar proyectos dentro de cada uno de ellos sin tener que estar lidiando con configuraciones manuales y evitando tener que usar el comando &lt;code&gt;amend&lt;/code&gt; para corregir errores.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Agradecimientos especiales a &lt;strong&gt;&lt;a href="https://twitter.com/feregri_no" rel="noopener noreferrer"&gt;feregri_no&lt;/a&gt;&lt;/strong&gt; y &lt;strong&gt;&lt;a href="https://twitter.com/ChrisFt25" rel="noopener noreferrer"&gt;ChrisFt25&lt;/a&gt;&lt;/strong&gt; de Twitter por enseñarme estos trucos.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;That’s All Folks!&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Happy Coding&lt;/strong&gt; 🖖&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sponsors/deinsoftware" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh4zle20oa7anpfjvap8n.png" alt="cerveza"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>spanish</category>
      <category>git</category>
      <category>github</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How to use multiple users with Git</title>
      <dc:creator>Camilo Martinez</dc:creator>
      <pubDate>Fri, 14 Oct 2022 18:00:27 +0000</pubDate>
      <link>https://dev.to/equiman/how-to-use-multiple-users-with-git-2e9l</link>
      <guid>https://dev.to/equiman/how-to-use-multiple-users-with-git-2e9l</guid>
      <description>&lt;p&gt;Language: [🇪🇸] &lt;a href="https://dev.to/equimancho/usar-multiples-usuarios-con-git-1fci"&gt;Español&lt;/a&gt; - [🇺🇸] &lt;a href="https://dev.to/equiman/how-to-use-multiple-users-with-git-2e9l"&gt;English&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;If you are working with multiple git users, for example, one for personal projects and another for a company. &lt;/p&gt;

&lt;p&gt;So &lt;strong&gt;it's not a good idea to set a global&lt;/strong&gt; user because all projects are going to use the same. And It will be easy to make a commit with the wrong user.&lt;/p&gt;

&lt;h2&gt;
  
  
  Amend
&lt;/h2&gt;

&lt;p&gt;If it's your case, don't worry. It's not really a problem, because you can amend it with this command.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

git commit --author="First Last &amp;lt;first.last@company.org&amp;gt;" --amend --no-edit 


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;But seriously, how want to do that frequently? No one, for sure. It's a thing to use only in emergency cases.&lt;/p&gt;




&lt;h2&gt;
  
  
  Git Config
&lt;/h2&gt;

&lt;p&gt;The first thing that I like to do is change the default core editor from &lt;code&gt;vim&lt;/code&gt; to &lt;code&gt;VSCode&lt;/code&gt;. It's an optional step.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

git config &lt;span class="nt"&gt;--global&lt;/span&gt; core.editor &lt;span class="s1"&gt;'code --wait'&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;And then create two alias to easy access the configurations&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gcg&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git config --edit --global"&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gcl&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git config --edit --local"&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The difference between them is that &lt;code&gt;global&lt;/code&gt; applies to all the git projects on your machine and &lt;code&gt;local&lt;/code&gt; only applies to the current path.&lt;/p&gt;




&lt;p&gt;Now we are going to learn how to use a different user for each project. &lt;/p&gt;

&lt;h2&gt;
  
  
  Remove Global 👌
&lt;/h2&gt;

&lt;p&gt;This steep is recommended, but also optional. I will prefer not to have a default user for all projects, but it is up to you.&lt;/p&gt;

&lt;p&gt;Now we are going to open the &lt;code&gt;global&lt;/code&gt; config using the &lt;code&gt;gcg&lt;/code&gt; alias or with the &lt;code&gt;git config --edit --global&lt;/code&gt; command.&lt;/p&gt;

&lt;p&gt;Remove all &lt;code&gt;[credential]&lt;/code&gt; and &lt;code&gt;[user]&lt;/code&gt; configurations.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Hard way 👎
&lt;/h2&gt;

&lt;p&gt;One option is after creating or cloning a repository, set manually the configuration with those commands.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

git config user.name &lt;span class="s2"&gt;"&amp;lt;user&amp;gt;"&lt;/span&gt;
git config user.email &lt;span class="s2"&gt;"&amp;lt;user@mail.com&amp;gt;"&lt;/span&gt;
git config credential.username &lt;span class="s2"&gt;"&amp;lt;user&amp;gt;"&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;It will be good if you don't have a specific path to which to create or clone the projects, but... it takes too much time and is easy to forget, believe me, moreover you are going to need to &lt;strong&gt;repeat the same&lt;/strong&gt; with each repository that you clone.&lt;/p&gt;

&lt;h2&gt;
  
  
  The easy way 👍
&lt;/h2&gt;

&lt;p&gt;We are going to define a path where our projects are going to live and create a &lt;code&gt;.gitconfig&lt;/code&gt; file for each &lt;strong&gt;user profile&lt;/strong&gt;, as many as we need.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

~
├── .gitconfig &amp;lt;&lt;span class="nt"&gt;--&lt;/span&gt; global
└── Developer/
   ├── personal/
   │   ├── project_1/
   │   ├── project_2/
   │   ├── project_#/
   │   └── .gitconfig &amp;lt;&lt;span class="nt"&gt;--&lt;/span&gt; personal
   └── company/
       ├── project_1/
       ├── project_2/
       ├── project_#/
       └── .gitconfig &amp;lt;&lt;span class="nt"&gt;--&lt;/span&gt; company


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Personal
&lt;/h3&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;

&lt;span class="c1"&gt;# ~/Developer/personal/.gitconfig&lt;/span&gt;

&lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;credential&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="s"&gt;username = &amp;lt;github-user&amp;gt;&lt;/span&gt;
&lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;user&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="s"&gt;name = &amp;lt;github-user&amp;gt;&lt;/span&gt;
    &lt;span class="s"&gt;email = &amp;lt;github-user&amp;gt;@users.noreply.github.com&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Business
&lt;/h3&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;

&lt;span class="c1"&gt;# ~/Developer/company/.gitconfig&lt;/span&gt;

&lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;credential&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="s"&gt;username = &amp;lt;user&amp;gt;&lt;/span&gt;
&lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;user&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="s"&gt;name = &amp;lt;First Name and Last Name&amp;gt;&lt;/span&gt;
    &lt;span class="s"&gt;email = &amp;lt;user&amp;gt;@company.org&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Global
&lt;/h3&gt;

&lt;p&gt;Now we are going to open the &lt;code&gt;global&lt;/code&gt; config using the &lt;code&gt;gcg&lt;/code&gt; alias or with the &lt;code&gt;git config --edit --global&lt;/code&gt; command.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;

&lt;span class="c1"&gt;# ~/.gitconfig&lt;/span&gt;

&lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;includeIf "gitdir/i&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;~/Developer/personal/"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="s"&gt;path = ~/Developer/personal/.gitconfig&lt;/span&gt;

&lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;includeIf "gitdir/i&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;~/Developer/company/"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="s"&gt;path = ~/Developer/company/.gitconfig&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;So, it will take the user configuration profile per path, and you can create or clone projects inside each &lt;strong&gt;profile path&lt;/strong&gt; without dealing with manual configurations and avoid using the &lt;code&gt;amend&lt;/code&gt; command to fix mistakes.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Special thanks to &lt;strong&gt;&lt;a href="https://twitter.com/feregri_no" rel="noopener noreferrer"&gt;feregri_no&lt;/a&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;a href="https://twitter.com/ChrisFt25" rel="noopener noreferrer"&gt;ChrisFt25&lt;/a&gt;&lt;/strong&gt; from Twitter to show me these tricks.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;That’s All Folks!&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Happy Coding&lt;/strong&gt; 🖖&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sponsors/deinsoftware" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmkgsx4aw6qn9i9ax6as9.png" alt="beer"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>git</category>
      <category>github</category>
      <category>productivity</category>
    </item>
    <item>
      <title>ZSH + Oh My ZSH! on Windows without WSL</title>
      <dc:creator>Camilo Martinez</dc:creator>
      <pubDate>Tue, 11 Oct 2022 17:54:49 +0000</pubDate>
      <link>https://dev.to/equiman/zsh-on-windows-without-wsl-4ah9</link>
      <guid>https://dev.to/equiman/zsh-on-windows-without-wsl-4ah9</guid>
      <description>&lt;p&gt;Well, WSL it's a good way to have a &lt;em&gt;Unixish&lt;/em&gt; environment on Windows, but sadly his performance and memory consumption leads me to find another alternative... and I found it in a place closer than I expected.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Bash
&lt;/h2&gt;

&lt;p&gt;The first step is to download and install &lt;a href="https://git-scm.com/download/win" rel="noopener noreferrer"&gt;git&lt;/a&gt; with bash terminal support.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. ZSH
&lt;/h2&gt;

&lt;p&gt;At least Bash is better than the windows CMD, but ZSH is in another league with his productivity boosts. So we are going to install ZSH over Bash.&lt;/p&gt;

&lt;h3&gt;
  
  
  Download ZSH
&lt;/h3&gt;

&lt;p&gt;Download the latest MSYS2 zsh package from the &lt;a href="https://packages.msys2.org/package/zsh?repo=msys&amp;amp;variant=x86_64" rel="noopener noreferrer"&gt;MSYS2 package repository&lt;/a&gt;. The file will be named something along the lines of &lt;code&gt;zsh-#.#-#-x86_64.pkg.tar.zst&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;zst&lt;/code&gt; files can be decompressed with &lt;a href="https://peazip.github.io/" rel="noopener noreferrer"&gt;PeaZip&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Install
&lt;/h3&gt;

&lt;p&gt;Extract the contents of the archive (which should include &lt;code&gt;etc&lt;/code&gt; and &lt;code&gt;usr&lt;/code&gt; folders) into your Git Bash installation directory. This is likely to be under &lt;code&gt;C:\Program Files\Git&lt;/code&gt;. Merge the contents of the folder if asked (no files should be getting overridden).&lt;/p&gt;

&lt;h3&gt;
  
  
  Setup
&lt;/h3&gt;

&lt;p&gt;Open the Git Bash terminal and run &lt;code&gt;zsh&lt;/code&gt; command, then verify the installed version.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

zsh &lt;span class="nt"&gt;--version&lt;/span&gt;
zsh 5.9 &lt;span class="o"&gt;(&lt;/span&gt;x86_64-pc-msys&lt;span class="o"&gt;)&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Configure &lt;code&gt;zsh&lt;/code&gt; as the default shell by appending the following to your &lt;code&gt;~/.bashrc&lt;/code&gt; file:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

if [ -t 1 ]; then
  exec zsh
fi


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Windows can mangle some UTF-8 encoded text, causing unexpected characters to be displayed in your terminal. To fix this, add the following to your &lt;code&gt;~/.bashrc&lt;/code&gt; file, ideally, before the code that sets your shell as zsh:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

/c/Windows/System32/chcp.com 65001 &amp;gt; /dev/null 2&amp;gt;&amp;amp;1


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Close and reopen the terminal, to update those changes. The first time will ask for some files creation, choose:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

Quit and do nothing.  The function will be run again next time.


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  3. Oh my zsh!
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Install
&lt;/h3&gt;

&lt;p&gt;Add superpowers to &lt;code&gt;zsh&lt;/code&gt; installing &lt;strong&gt;Oh my zsh!&lt;/strong&gt; running this command.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

sh &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Fonts
&lt;/h3&gt;

&lt;p&gt;Download and install manually the &lt;a href="https://github.com/romkatv/powerlevel10k#meslo-nerd-font-patched-for-powerlevel10k" rel="noopener noreferrer"&gt;Meslo Nerd Fonts&lt;/a&gt; to include all glyphs and symbols that Powerlevel10k may need&lt;/p&gt;
&lt;h3&gt;
  
  
  Theme
&lt;/h3&gt;

&lt;p&gt;There are a lot of themes but my favorite is &lt;a href="https://github.com/romkatv/powerlevel10k" rel="noopener noreferrer"&gt;Powerlevel10k&lt;/a&gt; because is easy to set up and use.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

git clone https://github.com/romkatv/powerlevel10k.git &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ZSH_CUSTOM&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="p"&gt;~/.oh-my-zsh/custom&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/themes/powerlevel10k


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;On the &lt;code&gt;~/.zshrc&lt;/code&gt; file add this additional configuration&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nv"&gt;ZSH_THEME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"powerlevel10k/powerlevel10k"&lt;/span&gt;
&lt;span class="nv"&gt;POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;&lt;span class="nb"&gt;history&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;POWERLEVEL9K_SHORTEN_DIR_LENGTH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1

&lt;span class="c"&gt;# User configuration&lt;/span&gt;

&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;LS_COLORS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"rs=0:no=00:mi=00:mh=00:ln=01;36:or=01;31:di=01;34:ow=04;01;34:st=34:tw=04;34:pi=01;33:so=01;33:do=01;33:bd=01;33:cd=01;33:su=01;35:sg=01;35:ca=01;35:ex=01;32:"&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Restart the terminal and type &lt;code&gt;p10k configure&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmtrv39dhe0f0b5pe2shs.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmtrv39dhe0f0b5pe2shs.gif" alt="Wizard" width="800" height="689"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠ if you can't see the icon symbols and always show an ▯, cancel the process, and refer to step 4 before continue. &lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Plugins
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Oh My zsh!&lt;/strong&gt; have &lt;a href="https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins" rel="noopener noreferrer"&gt;a lot of plugins&lt;/a&gt; to use. It's recommended to explore the options and use what is good for your needs.&lt;/p&gt;

&lt;p&gt;I've already installed a lot related to software development and other ones to add more functionalities. Running these commands:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

git clone https://github.com/zsh-users/zsh-autosuggestions.git &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ZSH_CUSTOM&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="p"&gt;~/.oh-my-zsh/custom&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ZSH_CUSTOM&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="p"&gt;~/.oh-my-zsh/custom&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/plugins/zsh-syntax-highlighting
git clone https://github.com/Pilaton/OhMyZsh-full-autoupdate.git &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ZSH_CUSTOM&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="p"&gt;~/.oh-my-zsh/custom&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/plugins/ohmyzsh-full-autoupdate


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;And now edit the &lt;code&gt;~/.zshrc&lt;/code&gt; file and add it inside the &lt;code&gt;plugins&lt;/code&gt; property (don't use commas as separators)&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nv"&gt;plugins&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;
    adb
    command-not-found
    extract
    deno
    docker
    git
    github
    gitignore
    history-substring-search
    node
    npm
    nvm
    yarn
    volta
    vscode
    &lt;span class="nb"&gt;sudo
    &lt;/span&gt;web-search
    z
    zsh-autosuggestions
    zsh-syntax-highlighting
    ohmyzsh-full-autoupdate
&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# User configuration&lt;/span&gt;

&lt;span class="nv"&gt;ZSH_HIGHLIGHT_HIGHLIGHTERS&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;main brackets pattern cursor root line&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;ZSH_HIGHLIGHT_PATTERNS&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;&lt;span class="s1"&gt;'rm -rf *'&lt;/span&gt; &lt;span class="s1"&gt;'fg=white,bold,bg=red'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;If you are using NVM take care of following this &lt;a href="https://lakur.tech/2021/12/10/fix-slow-zsh-startup-nvm/" rel="noopener noreferrer"&gt;configuration to avoid slowing the zsh start-up&lt;/a&gt; and this &lt;a href="https://gist.github.com/ctechols/ca1035271ad134841284?permalink_comment_id=3365691" rel="noopener noreferrer"&gt;configuration to speed up the compinit&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;⚠ If you have done previous package configurations, alias definitions, or something else on your &lt;code&gt;~/.basrc&lt;/code&gt; previous ZSH installation you need to move those manually to &lt;code&gt;~/.zshrc&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  4. Terminals
&lt;/h2&gt;

&lt;p&gt;To use the same terminal inside VSCode and Windows Terminal follow these configurations.&lt;/p&gt;
&lt;h3&gt;
  
  
  VS Code
&lt;/h3&gt;

&lt;p&gt;Add these properties to the user &lt;code&gt;setttings.json&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;{ 
    ...
&lt;span class="gi"&gt;+   "terminal.integrated.fontFamily": "MesloLGS NF",
+   "terminal.integrated.fontSize": 12,
+   "terminal.integrated.shellIntegration.enabled": true,
+   "terminal.integrated.defaultProfile.windows": "Git Bash",
&lt;/span&gt;    ...
}
&lt;span class="err"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Microsoft Terminal
&lt;/h3&gt;

&lt;p&gt;Add these configurations on the Git Bash terminal.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;{
    "profiles": {
        "defaults": {},
        "list": [
            {
&lt;span class="gi"&gt;+               "font": {
+                   "face": "MesloLGS NF",
+                   "size": 12
+               },
&lt;/span&gt;                "guid": "{2ece5bfe-50ed-5f3a-ab87-5cd4baafed2b}",
                "hidden": false,
                "name": "Git Bash",
                "source": "Git",
&lt;span class="gi"&gt;+               "startingDirectory": "D:\\Developer"
&lt;/span&gt;            },
        ]
    }
}
&lt;span class="err"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Downsides
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Git Bash &lt;strong&gt;is an emulation layer&lt;/strong&gt;, so It's not as fast as I expected, but much faster than WSL (and also not dealing with his memory and performance issues)&lt;/li&gt;
&lt;li&gt;Take some time to load the first time (but, less than WSL).&lt;/li&gt;
&lt;li&gt;Volta on Windows requires additional permissions, maybe you gonna need to come back to NVM&lt;/li&gt;
&lt;li&gt;Strange behavior while writing inside VS Code terminal&lt;/li&gt;
&lt;li&gt;Can't use paths saved on &lt;code&gt;%VARIABLE%&lt;/code&gt;, you are going to need to translate it with &lt;code&gt;cygpath $LOCALAPPDATA&lt;/code&gt;. To change to a path use something like this &lt;code&gt;$(cygpath $LOCALAPPDATA)/Volta/tools/image/node/&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If Git Bash is not what you expect, you can also come back to WSL and use ZSH + Oh My ZSH!&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/equiman" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F60846%2Fa7b57cd0-916f-408e-ad8e-86c03c941327.jpg" alt="equiman"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/equiman/zsh-on-windows-with-wsl-1jck" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;ZSH + Oh My ZSH! on Windows with WSL&lt;/h2&gt;
      &lt;h3&gt;Camilo Martinez ・ Mar 3 '23&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#productivity&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#zsh&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#git&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#terminal&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;






&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dominikrys.com/posts/zsh-in-git-bash-on-windows/" rel="noopener noreferrer"&gt;Installing Zsh (and oh-my-zsh) in Windows Git Bash&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.mattclemente.com/2020/06/26/oh-my-zsh-slow-to-load/" rel="noopener noreferrer"&gt;Speeding Up My Shell (Oh My Zsh)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;That’s All Folks!&lt;br&gt;
Happy Coding&lt;/strong&gt; 🖖&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sponsors/deinsoftware" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmkgsx4aw6qn9i9ax6as9.png" alt="beer" width="360" height="86"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>zsh</category>
      <category>git</category>
      <category>terminal</category>
    </item>
    <item>
      <title>VSCode - Terminal without using mouse</title>
      <dc:creator>Camilo Martinez</dc:creator>
      <pubDate>Fri, 30 Sep 2022 13:52:02 +0000</pubDate>
      <link>https://dev.to/equiman/vscode-terminal-without-using-mouse-5bd0</link>
      <guid>https://dev.to/equiman/vscode-terminal-without-using-mouse-5bd0</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Look ma, no &lt;del&gt;hands&lt;/del&gt; mouse!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you are trying to reduce the interaction with the mouse during development in order to increase productivity, you are in the correct place.&lt;/p&gt;

&lt;p&gt;VSCode includes an integrated terminal and used wisely can be your best friend, but sometimes it will need a lot of mouse interactions, so I decided to tweak it a little. &lt;/p&gt;




&lt;h2&gt;
  
  
  Create
&lt;/h2&gt;

&lt;p&gt;The first step it's adding my secret keyboard shortcut settings.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ctrl+`"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"workbench.action.terminal.focus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"when"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"editorTextFocus"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ctrl+shift+`"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"workbench.action.terminal.new"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"when"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"terminalProcessSupported || terminalWebExtensionContributedProfile"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ctrl+shift+`"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"workbench.action.createTerminalEditor"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"when"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"editorTextFocus"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ctrl+`"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"workbench.action.focusActiveEditorGroup"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"when"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"terminalFocus"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"alt+`"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//opt+`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;macOS&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"workbench.action.toggleMaximizedPanel"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ctrl+alt+`"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//ctrl+opt+`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;macOS&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"workbench.action.terminal.toggleTerminal"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ctrl+&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"workbench.action.terminal.split"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"when"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"terminalFocus"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ctrl+space"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"workbench.action.terminal.runRecentCommand"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"when"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"terminalFocus"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ctrl+w"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"workbench.action.terminal.kill"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"when"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"terminalFocus"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ctrl+k ctrl+w"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"workbench.action.terminal.killAll"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"when"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"terminalFocus"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;


&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;h2&gt;
  
  
  Learn
&lt;/h2&gt;

&lt;p&gt;The next step, familiarize yourself with the new keyboard shortcuts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Basics
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Focused&lt;/th&gt;
&lt;th&gt;Win/Linux&lt;/th&gt;
&lt;th&gt;macOS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Open terminal&lt;/td&gt;
&lt;td&gt;Terminal&lt;/td&gt;
&lt;td&gt;ctrl+`&lt;/td&gt;
&lt;td&gt;ctrl+`&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Toggle to terminal&lt;/td&gt;
&lt;td&gt;Editor&lt;/td&gt;
&lt;td&gt;ctrl+`&lt;/td&gt;
&lt;td&gt;ctrl+`&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Toggle to editor&lt;/td&gt;
&lt;td&gt;Terminal&lt;/td&gt;
&lt;td&gt;ctrl+`&lt;/td&gt;
&lt;td&gt;ctrl+`&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Toggle maximize/minimize&lt;/td&gt;
&lt;td&gt;Terminal&lt;/td&gt;
&lt;td&gt;alt+`&lt;/td&gt;
&lt;td&gt;opt+`&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Toggle show/hide&lt;/td&gt;
&lt;td&gt;Terminal&lt;/td&gt;
&lt;td&gt;ctrl+alt+`&lt;/td&gt;
&lt;td&gt;ctrl+opt+`&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;New terminal&lt;/td&gt;
&lt;td&gt;Terminal&lt;/td&gt;
&lt;td&gt;ctrl+shift+`&lt;/td&gt;
&lt;td&gt;ctrl+shift+`&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;New terminal as tab&lt;/td&gt;
&lt;td&gt;Editor&lt;/td&gt;
&lt;td&gt;ctrl+shift+`&lt;/td&gt;
&lt;td&gt;ctrl+shift+`&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;New terminal split&lt;/td&gt;
&lt;td&gt;Terminal&lt;/td&gt;
&lt;td&gt;ctrl+\&lt;/td&gt;
&lt;td&gt;ctrl+\&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Close terminal&lt;/td&gt;
&lt;td&gt;Terminal&lt;/td&gt;
&lt;td&gt;ctrl+w&lt;/td&gt;
&lt;td&gt;ctrl+w&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Close all terminals&lt;/td&gt;
&lt;td&gt;Terminal&lt;/td&gt;
&lt;td&gt;ctrl+k ctrl+w&lt;/td&gt;
&lt;td&gt;ctrl+k ctrl+w&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Navigation
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Focused&lt;/th&gt;
&lt;th&gt;Win/Linux&lt;/th&gt;
&lt;th&gt;macOS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Previous terminal&lt;/td&gt;
&lt;td&gt;Terminal&lt;/td&gt;
&lt;td&gt;ctrl+pageUp&lt;/td&gt;
&lt;td&gt;ctrl+pageUp&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Next terminal&lt;/td&gt;
&lt;td&gt;Terminal&lt;/td&gt;
&lt;td&gt;ctrl+pageDown&lt;/td&gt;
&lt;td&gt;ctrl+pageDown&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Previous split terminal&lt;/td&gt;
&lt;td&gt;Terminal&lt;/td&gt;
&lt;td&gt;alt+upArrow&lt;/td&gt;
&lt;td&gt;opt+upArrow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Next split terminal&lt;/td&gt;
&lt;td&gt;Terminal&lt;/td&gt;
&lt;td&gt;alt+downArrow&lt;/td&gt;
&lt;td&gt;opt+downArrow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scroll Up&lt;/td&gt;
&lt;td&gt;Terminal&lt;/td&gt;
&lt;td&gt;ctrl+downArrow&lt;/td&gt;
&lt;td&gt;ctrl+upArrow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scroll down&lt;/td&gt;
&lt;td&gt;Terminal&lt;/td&gt;
&lt;td&gt;ctrl+downArrow&lt;/td&gt;
&lt;td&gt;ctrl+upArrow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scroll to top&lt;/td&gt;
&lt;td&gt;Terminal&lt;/td&gt;
&lt;td&gt;ctrl+home&lt;/td&gt;
&lt;td&gt;ctrl+home&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scroll to bottom&lt;/td&gt;
&lt;td&gt;Terminal&lt;/td&gt;
&lt;td&gt;ctrl+end&lt;/td&gt;
&lt;td&gt;ctrl+end&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Integrated
&lt;/h3&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"terminal.integrated.shellIntegration.enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;


&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;If you have the shell integration terminal enabled, you can also re-run recent commands.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Focused&lt;/th&gt;
&lt;th&gt;Win/Linux&lt;/th&gt;
&lt;th&gt;macOS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Run recent command&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;ctrl+space&lt;/td&gt;
&lt;td&gt;ctrl+space&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Practice
&lt;/h2&gt;

&lt;p&gt;The final step is practice and repetition, there is no other way to remember those keyboard shortcuts. &lt;/p&gt;

&lt;p&gt;Open a project in VSCode, &lt;strong&gt;disconnect or shutdown your mouse&lt;/strong&gt;, close your eyes, take a deep breath, and enter into Lighting McQueen mode 😜&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9xfb12rhhq9vp3zulvjk.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9xfb12rhhq9vp3zulvjk.gif" alt="Lightning McQueen"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenge 1
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Open a terminal&lt;/li&gt;
&lt;li&gt;Toggle to the code editor&lt;/li&gt;
&lt;li&gt;Add a comment&lt;/li&gt;
&lt;li&gt;Back to the terminal&lt;/li&gt;
&lt;li&gt;Commit changes&lt;/li&gt;
&lt;li&gt;Close the terminal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
  Solution
  &lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fytdu8pttgnj5thxwy1jn.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fytdu8pttgnj5thxwy1jn.gif" alt="solution-1"&gt;&lt;/a&gt; &lt;/p&gt;



&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenge 2
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Open a terminal&lt;/li&gt;
&lt;li&gt;Execute a run command (&lt;code&gt;npm run...&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Hide terminal (this doesn't stop his execution)&lt;/li&gt;
&lt;li&gt;Made changes to the code&lt;/li&gt;
&lt;li&gt;Show terminal&lt;/li&gt;
&lt;li&gt;Stop execution (&lt;code&gt;ctrl+c&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Close the terminal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
  Solution
  &lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flss4rkktty68c5zh4vha.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flss4rkktty68c5zh4vha.gif" alt="solution-2"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenge 3
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Open a terminal&lt;/li&gt;
&lt;li&gt;Execute the test (&lt;code&gt;npm run test&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Maximize the terminal to see the results&lt;/li&gt;
&lt;li&gt;Minimize the terminal&lt;/li&gt;
&lt;li&gt;Go to the code editor and "fix" the failed test&lt;/li&gt;
&lt;li&gt;Go to terminal&lt;/li&gt;
&lt;li&gt;Execute the test again (&lt;code&gt;npm run test&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Maximize the terminal to see the results&lt;/li&gt;
&lt;li&gt;Minimize the terminal&lt;/li&gt;
&lt;li&gt;Close the terminal&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Challenge 4
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Open a terminal as tab&lt;/li&gt;
&lt;li&gt;Execute the lint command (&lt;code&gt;npm run lint&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;See the changes on the previous tab (code)&lt;/li&gt;
&lt;li&gt;Back to the terminal tab&lt;/li&gt;
&lt;li&gt;Close the terminal&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Challenge 5
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Open a terminal&lt;/li&gt;
&lt;li&gt;Execute a run command (&lt;code&gt;npm run...&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Create another terminal&lt;/li&gt;
&lt;li&gt;Execute the test on watch mode (&lt;code&gt;npm run test --watch&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Create another terminal &lt;/li&gt;
&lt;li&gt;Execute the eslint command (&lt;code&gt;npm run linter&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Hide terminals&lt;/li&gt;
&lt;li&gt;Go to the code and made some changes&lt;/li&gt;
&lt;li&gt;Show terminals&lt;/li&gt;
&lt;li&gt;Go back to the terminal and stop the watch mode&lt;/li&gt;
&lt;li&gt;Go to the last terminal and run the list command&lt;/li&gt;
&lt;li&gt;Go to the first terminal and stop his execution (&lt;code&gt;ctrl + c&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Close all terminals&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Challenge 6
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Open a terminal&lt;/li&gt;
&lt;li&gt;Execute a run command (&lt;code&gt;npm run...&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Create another terminal&lt;/li&gt;
&lt;li&gt;Execute the test on watch mode (&lt;code&gt;npm run test --watch&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Create another split terminal &lt;/li&gt;
&lt;li&gt;Execute the eslint command (&lt;code&gt;npm run linter&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Hide terminals&lt;/li&gt;
&lt;li&gt;Go to the code and made some changes&lt;/li&gt;
&lt;li&gt;Show terminals&lt;/li&gt;
&lt;li&gt;Go back to the terminal and stop the watch mode&lt;/li&gt;
&lt;li&gt;Go to the last terminal and run the list command&lt;/li&gt;
&lt;li&gt;Go to the first terminal and stop his execution (&lt;code&gt;ctrl + c&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Close all terminals&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tell me in the comments if you can solve the challenges 👇&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;That’s All Folks!&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Happy Coding&lt;/strong&gt; 🖖&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sponsors/deinsoftware" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmkgsx4aw6qn9i9ax6as9.png" alt="beer"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>terminal</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
