iTerm2:进入 PS1 提示的路径太长时在不同的行上被破坏(\n)
iTerm2 : Path into PS1 prompt is broken (\n) on different lines when it is too long
我在 MacOS Catalina 上使用 iTerm2。这是我的 PS1
到 ~/.bashrc
,使用函数 ps1
:
function ps1 {
# PROMPT SECTION
BLUE='\[3[0;34m\]'
LIGHT_CYAN='\[3[1;36m\]'
DEFAULT='\[3[0m\]'
PURPLE='\[3[0;35m\]'
LIGHT_PURPLE='\[3[1;35m\]'
LIGHT_GREEN='\[3[0;32m\]'
PINK='\[3\[0;31m\]'
# \! - History number of last command
# $? - Exit value of last command
# \t - Exit time of last command
# \w - Current directory (relative)
PS1="$PURPLE|$DEFAULT$LIGHT_GREEN\u@$DEFAULT$LIGHT_CYAN\h$DEFAULT$PURPLE|$DEFAULT\t$PURPLE|$DEFAULT$LIGHT_PURPLE\w$DEFAULT$PURPLE|$DEFAULT "
}
ps1
问题发生在我的路径很长时,它似乎在第二行或第三行被打破,像这样:
我尝试将列数(增加到 1000)增加到 iTerm2 -> Preferences
,但它似乎无法解决这个问题。
我看不出错误是从哪里来的。可能出了什么问题?
fab@astro|13:12:32|~/Phd_2019_2020/Travail_2_faire_varier_Omega_DE_sur_CAMB_et_regarder_si_les_P_k_changent_21_Octobre_2019/Main_Directory_Work/TSAF_lvl_up_Derivatives_15_points_on_Cl_stabilite_Code_is_surel
y_VALIDATED_for_15_points_derivatives_AND_After_trying_to_solve_the_pathologic_zone_1e-5_TO_1e-2_13_Novembre_2019/Test_FAIRE_VARIER_TOUS_LES_PARAMETRES_AVEC_les_2_pas_2e-2_et_1e-1_AVEC_Takabird_SECONDE_TENTATIVE_AVEC_LA_VAR IATION_de_wde_EN_FLAT_DANS_Camb_launcher_6_DECEMBRE_2019/CAMB_der_3_pts/fortran|
更新
解决方案终于在 this link 上找到。
在 iTerm2 上停止自动换行仍然是 open feature request。所以我担心如果你的线太长,它会自动换行。
但是,您可以构建自己的 PS1,使行不会溢出,方法是 trim 向下设置路径。
为此,如果您想手动执行此操作,则需要命令 tput cols
来获取终端上的列数,或者仅使用 there 中的答案之一。
如果您愿意将 shell 从 bash 更改为 zsh,zsh trim 中的很多路径都不会溢出。
this answer 中给出的另一个解决方案是使用命令 tput rmam
丢弃溢出的输出,然后使用 tput smam
重新启用换行
我在 MacOS Catalina 上使用 iTerm2。这是我的 PS1
到 ~/.bashrc
,使用函数 ps1
:
function ps1 {
# PROMPT SECTION
BLUE='\[3[0;34m\]'
LIGHT_CYAN='\[3[1;36m\]'
DEFAULT='\[3[0m\]'
PURPLE='\[3[0;35m\]'
LIGHT_PURPLE='\[3[1;35m\]'
LIGHT_GREEN='\[3[0;32m\]'
PINK='\[3\[0;31m\]'
# \! - History number of last command
# $? - Exit value of last command
# \t - Exit time of last command
# \w - Current directory (relative)
PS1="$PURPLE|$DEFAULT$LIGHT_GREEN\u@$DEFAULT$LIGHT_CYAN\h$DEFAULT$PURPLE|$DEFAULT\t$PURPLE|$DEFAULT$LIGHT_PURPLE\w$DEFAULT$PURPLE|$DEFAULT "
}
ps1
问题发生在我的路径很长时,它似乎在第二行或第三行被打破,像这样:
我尝试将列数(增加到 1000)增加到 iTerm2 -> Preferences
,但它似乎无法解决这个问题。
我看不出错误是从哪里来的。可能出了什么问题?
fab@astro|13:12:32|~/Phd_2019_2020/Travail_2_faire_varier_Omega_DE_sur_CAMB_et_regarder_si_les_P_k_changent_21_Octobre_2019/Main_Directory_Work/TSAF_lvl_up_Derivatives_15_points_on_Cl_stabilite_Code_is_surel
y_VALIDATED_for_15_points_derivatives_AND_After_trying_to_solve_the_pathologic_zone_1e-5_TO_1e-2_13_Novembre_2019/Test_FAIRE_VARIER_TOUS_LES_PARAMETRES_AVEC_les_2_pas_2e-2_et_1e-1_AVEC_Takabird_SECONDE_TENTATIVE_AVEC_LA_VAR IATION_de_wde_EN_FLAT_DANS_Camb_launcher_6_DECEMBRE_2019/CAMB_der_3_pts/fortran|
更新
解决方案终于在 this link 上找到。
在 iTerm2 上停止自动换行仍然是 open feature request。所以我担心如果你的线太长,它会自动换行。
但是,您可以构建自己的 PS1,使行不会溢出,方法是 trim 向下设置路径。
为此,如果您想手动执行此操作,则需要命令 tput cols
来获取终端上的列数,或者仅使用 there 中的答案之一。
如果您愿意将 shell 从 bash 更改为 zsh,zsh trim 中的很多路径都不会溢出。
this answer 中给出的另一个解决方案是使用命令 tput rmam
丢弃溢出的输出,然后使用 tput smam